Ich implementiere Django in einem Projekt anmelden. Ich habe es so funktioniert, dass Protokolleinträge in einer Datei in unserer Entwicklungsumgebung und in einer Datenbank in unserer Produktionsumgebung eingefügt werden.Django-Protokollierung, Protokollierung in Datei in Entwicklung, ohne die Datei in Produktion erstellen zu müssen
Das Problem, das ich habe, ist, dass Django die Protokolldatei erstellen muss, auch wenn sie in Nicht-Entwicklungsumgebungen leer ist.
Gibt es eine bessere Möglichkeit, dies zu implementieren, so dass die leere Protokolldatei nicht in Nicht-Entwicklungsumgebungen erstellt wird?
Mein Code:
settings.py
Logging-Konfiguration:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
},
'is_not_dev_environment': {
'()': 'lib.log.log.IsNotDevEnvironment'
},
'is_dev_environment': {
'()': 'lib.log.log.IsDevEnvironment'
}
},
'formatters': {
'standard': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
'custom': {
'format': CUSTOM_LOGGING_FORMAT,
'datefmt': "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'db': {
'level': LOGGING_LEVEL,
'filters': ['is_not_dev_environment'],
'class': 'lib.log.log.DBLogHandler',
'formatter': 'custom'
},
'file': {
'level': LOGGING_LEVEL,
'filters': ['is_dev_environment'],
'filename': /var/log/django.log,
'class': 'lib.log.log.FileLogHandler',
'formatter': 'custom',
},
},
'loggers': {
'django': {
'handlers': ['mail_admins'],
'level': LOGGING_LEVEL,
'propagate': True,
}
}
}
LOGGING['loggers'].update({app: copy.deepcopy(LOCAL_APP_LOGGER) for app in LOCAL_APPS})
lib/log/log.py
, die die Filterklassen gilt:
class IsNotDevEnvironment(logging.Filter):
def filter(self, record):
return settings.ENVIRONMENT != 'DEV'
class IsDevEnvironment(logging.Filter):
def filter(self, record):
return settings.ENVIRONMENT == 'DEV'