在 python 中配置根记录器
Posted
技术标签:
【中文标题】在 python 中配置根记录器【英文标题】:Configuring root logger in python 【发布时间】:2014-01-28 02:11:38 【问题描述】:我的 Django 设置中有以下日志记录配置。
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'formatters':
'verbose':
'format':
'%(levelname)s|%(asctime)s|%(name)s>> %(message)s',
,
,
'handlers':
'console':
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
,
'loggers':
'':
'handlers': ['console'],
'level': 'ERROR',
'propagate': True,
,
'apps':
'handlers': ['console'],
'level': 'DEBUG',
,
使用此配置,我希望我的“应用程序”以 DEBUG 级别登录,而任何其他模块仅记录 ERROR 及以上级别。但我看到来自其他模块的 DEBUG 消息。我该如何解决?
【问题讨论】:
【参考方案1】:您是否在LOGGING['loggers']
中使用空字符串键来匹配根记录器?如果是这样,你可以试试这个。
LOGGING =
'version': 1,
'disable_existing_loggers': False,
'formatters':
'verbose':
'format':
'%(levelname)s|%(asctime)s|%(name)s>> %(message)s',
,
,
'handlers':
'console':
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose',
,
'loggers':
'apps':
'handlers': ['console'],
'level': 'DEBUG',
,
'root':
'handlers': ['console'],
'level': 'ERROR'
【讨论】:
我试过了,但没有用。仍然看到来自其他模块的 DEBUG 消息。 @Chamindu 您是否尝试将''
更改为'root'
而不是将其移出loggers
? (我参加聚会有点晚了,对不起!)
我没试过。这是很久以前的事了,我什至不记得我在哪里尝试这样做:)
我设置了根,它有帮助。但实际上我无法向自己解释为什么必须配置 root ?我的意思是它的目的是什么。
我遇到了相反的问题:使用 'root' 它只显示 WARNING 及以上,而将其设置为空字符串也显示 DEBUG 和 INFO 消息。【参考方案2】:
我遇到了类似的问题,root 记录器在INFO
配置了一个级别,但看到了 DEBUG 日志消息。
事实证明,我不应该为级别为 DEBUG
的其他记录器设置 'propagate': True
,因为无论 root 处于什么级别,这些日志都将传递给根记录器。
所以我对原始问题的猜测是,可能有一些其他模块的记录器打开了propagate
。将disable_existing_loggers
设置为True
或许可以解决这个问题。
【讨论】:
以上是关于在 python 中配置根记录器的主要内容,如果未能解决你的问题,请参考以下文章
确定根记录器是不是在 Python 中设置为 DEBUG 级别?