プロジェクトに Django ロギングを実装しています。ログエントリが開発環境のファイルに挿入され、運用環境のデータベースに挿入されるように動作しています。
私が抱えている問題は、非開発環境では空であっても、Django がログ ファイルを作成する必要があることです。
非開発環境で空のログ ファイルが作成されないように、これを実装するより良い方法はありますか?
私のコード:
settings.py
ロギング構成:
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
フィルタリング クラスを保持します。
class IsNotDevEnvironment(logging.Filter):
def filter(self, record):
return settings.ENVIRONMENT != 'DEV'
class IsDevEnvironment(logging.Filter):
def filter(self, record):
return settings.ENVIRONMENT == 'DEV'