我正在尝试设置我的Django应用程序,并且在配置settings.py文件中的日志记录时出现问题。
Django文档和Python的日志文档说明使用:
'disable_existing_loggers': False
将允许我使用现有的日志记录配置,这样我就不必重复自己了。在这种情况下,默认日志记录是django.utils.log.py
当我尝试在DEFAULT_LOGGING
,require_debug_true
中使用现有的过滤器时,在我的一个设置为LOGGING_CONFIG
的settings.py中,我在尝试运行runserver时遇到了KeyError。
尝试在记录器中使用现有处理程序时,我也会遇到同样的错误,例如console
。我能想到的唯一原因是,Django不知何故忽视了disable_existing_loggers
旗帜。
之前是否有人遇到此问题?谢谢你的帮助。
File "/usr/lib/python3.4/logging/config.py", line 750, in add_handlers
logger.addHandler(self.config['handlers'][h])
File "/usr/lib/python3.4/logging/config.py", line 317, in __getitem__
value = dict.__getitem__(self, key)
KeyError: 'console'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.4/logging/config.py", line 611, in configure
self.configure_logger(name, loggers[name])
File "/usr/lib/python3.4/logging/config.py", line 775, in configure_logger
self.common_logger_config(logger, config, incremental)
File "/usr/lib/python3.4/logging/config.py", line 767, in common_logger_config
self.add_handlers(logger, handlers)
File "/usr/lib/python3.4/logging/config.py", line 752, in add_handlers
raise ValueError('Unable to add handler %r: %s' % (h, e))
ValueError: Unable to add handler 'console': 'console'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'activity': {
'format': '[%(levelname)s] %(pathname)s <%(funcName)s>[%(lineno)s] : %(message)s',
},
'debug': {
'format': '[%(levelname)s] %(pathname)s <%(funcName)s>[%(lineno)s] : %(message)s',
},
},
'handlers': {
'debug': {
'level': 'DEBUG',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': '/var/www/app/log/debug.log',
'formatter': 'debug',
'backupCount': 48,
'when': 'H',
},
'activity': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': '/var/www/app/log/activity.log',
'formatter': 'activity',
'backupCount': 48,
'when': 'H',
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': '/var/www/app/log/error.log',
'formatter': 'activity',
'backupCount': 48,
'when': 'H',
},
'syslog': {
'level': 'INFO',
'class': 'logging.handlers.SysLogHandler',
'formatter': 'activity',
'facility': SysLogHandler.LOG_LOCAL2,
'address': '/dev/log',
},
},
'loggers': {
'app.activity': {
'handlers': ["activity", "error", "debug"],
'level': 'DEBUG',
'propagate': True,
},
'django.request': {
'handlers': ["mail_admins", "error", "activity", "debug"],
'level': 'ERROR',
'propagate': False,
},
'django.security': {
'handlers': ["mail_admins", "error", "activity"],
'level': 'ERROR',
'propagate': False,
},
'py.warnings': {
'handlers': ["console", "debug"],
},
},
}
答案 0 :(得分:1)
在我看来,您需要将console
处理程序的配置以及django.utils.log.py
中的其余处理程序,过滤器和格式化程序(您使用的)添加到日志记录配置中。
disable_existing_loggers
参数仅关注记录器(不是处理程序,过滤器和格式化程序)
答案 1 :(得分:0)
保留默认日志记录配置并仅自定义某些设置的最简单方法是更新Django用于配置日志记录的django.utils.log.DEFAULT_LOGGING
:
from django.utils.log import DEFAULT_LOGGING
# Enable logging to console from our modules by configuring the root logger
DEFAULT_LOGGING['loggers'][''] = {
'handlers': ['console'],
'level': 'INFO',
'propagate': True
}
该字段必须位于settings.py
中,因为将在导入设置后立即配置日志记录。