Python 带有默认配置的自定义Django日志配置
我正在尝试设置Django应用程序,但在配置登录settings.py文件时遇到问题 Django文档和Python的日志文档说明使用:Python 带有默认配置的自定义Django日志配置,python,django,logging,Python,Django,Logging,我正在尝试设置Django应用程序,但在配置登录settings.py文件时遇到问题 Django文档和Python的日志文档说明使用: 'disable_existing_logger':False将允许我使用现有的日志配置,这样我就不必重复自己的操作。这种情况下的默认日志记录是在django.utils.log.py 当我尝试在settings.py中的LOGGING\u CONFIG处理程序中使用DEFAULT\u LOGGING、require\u debug\u true中的现有过滤器
'disable_existing_logger':False
将允许我使用现有的日志配置,这样我就不必重复自己的操作。这种情况下的默认日志记录是在django.utils.log.py
当我尝试在settings.py中的LOGGING\u CONFIG
处理程序中使用DEFAULT\u LOGGING
、require\u debug\u true
中的现有过滤器时,我在尝试运行runserver时遇到一个KeyError
在尝试使用记录器中的现有处理程序(如console
)时,我也会遇到相同的错误。我能想到的唯一原因是Django不知何故忽略了disable\u existing\u logger
标志
以前有人遇到过这个问题吗?谢谢你的帮助
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"],
},
},
}
添加处理程序中的第750行“/usr/lib/python3.4/logging/config.py”
logger.addHandler(self.config['handlers'][h])
文件“/usr/lib/python3.4/logging/config.py”,第317行,在__
value=dict.\uuuu getitem\uuuuuuu(self,key)
KeyError:“控制台”
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.4/logging/config.py”,第611行,在configure中
self.configure_记录器(名称,记录器[名称])
文件“/usr/lib/python3.4/logging/config.py”,第775行,在configure_logger中
self.common_logger_config(记录器,配置,增量)
文件“/usr/lib/python3.4/logging/config.py”,第767行,在common\u logger\u config中
self.add_处理程序(记录器、处理程序)
文件“/usr/lib/python3.4/logging/config.py”,第752行,在add\u处理程序中
raise VALUERROR('无法添加处理程序%r:%s'(h,e))
ValueError:无法添加处理程序“控制台”:“控制台”
日志记录={
“版本”:1,
“禁用现有日志记录器”:False,
“格式化程序”:{
“活动”:{
'格式':'[%(levelname)s]%(路径名)s[%(行号)s]:%(消息)s',
},
“调试”:{
'格式':'[%(levelname)s]%(路径名)s[%(行号)s]:%(消息)s',
},
},
“处理程序”:{
“调试”:{
“级别”:“调试”,
'class':'logging.handlers.TimedRotatingFileHandler',
“文件名”:“/var/www/app/log/debug.log”,
“格式化程序”:“调试”,
“备份计数”:48,
‘when’:‘H’,
},
“活动”:{
“级别”:“信息”,
'class':'logging.handlers.TimedRotatingFileHandler',
'filename':'/var/www/app/log/activity.log',
“格式化程序”:“活动”,
“备份计数”:48,
‘when’:‘H’,
},
“错误”:{
“级别”:“错误”,
'class':'logging.handlers.TimedRotatingFileHandler',
'filename':'/var/www/app/log/error.log',
“格式化程序”:“活动”,
“备份计数”:48,
‘when’:‘H’,
},
“系统日志”:{
“级别”:“信息”,
'class':'logging.handlers.SysLogHandler',
“格式化程序”:“活动”,
“设施”:SysLogHandler.LOG\u LOCAL2,
“地址”:“/dev/log”,
},
},
“伐木工人”:{
“应用程序活动”:{
“处理程序”:[“活动”、“错误”、“调试”],
“级别”:“调试”,
"传播":对,,
},
“django.request”:{
“处理程序”:[“邮件管理员”、“错误”、“活动”、“调试”],
“级别”:“错误”,
"传播":假,,
},
“django.security”:{
“处理程序”:[“邮件管理员”、“错误”、“活动”],
“级别”:“错误”,
"传播":假,,
},
“py.警告”:{
“处理程序”:[“控制台”,“调试”],
},
},
}
在我看来,您需要将
控制台
处理程序的配置以及django.utils.log.py
中的其他处理程序、过滤器和格式化程序(您使用的)添加到日志配置中
disable_existing_loggers
参数仅适用于记录器(不适用于处理程序、筛选器和格式化程序)保持默认日志配置并仅自定义某些设置的最简单方法是更新django.utils.log.default_logging,django使用该参数配置日志:
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中,因为日志记录将在导入设置后立即配置。能否在settings.py中显示日志记录配置?我想这可能会有帮助。。。我想你可能是对的,必须仔细阅读文档。记录器!=日志配置。感谢您的关注。为一些简单的调试目的省去了很多麻烦。