在我的应用程序中,我有一个主类,我在其中设置了这个日志级别配置
logger = logging.getLogger('my-app')
logger.setLevel(logging.WARNING))
和其他配置登录文件。其他应用程序对象使用此本地记录器
self.logger = logging.getLogger('{}.{}'.format('my-app', self.__class__.__name__))
他们可以正确登录。 在运行时,应用程序日志级别可以更改,因此我尝试在其他对象中使用此代码
level = logging.DEBUG
...
self.logger.setLevel(level)
- or -
logging.getLogger('my-app.'+self.__class__.__name__).setLevel(level)
- or -
logger = logging.getLogger()
logger.setLevel(level)
但没有效果。
所以我决定打印记录器对象的状态,我注意到日志级别发生了变化,但没有在低于WARN的级别打印日志行
pprint(vars(self.logger), indent=2)
#prints
# on app starts, log level WARN by default
{ 'disabled': False,
'filters': [],
'handlers': [],
'level': 0,
'manager': <logging.Manager object at 0x7f5355eb1160>,
'name': 'ClientDesktop.CApplicationStatus',
'parent': <logging.Logger object at 0x7f5359743668>,
'propagate': True}
# on log changed to DEBUG
{ 'disabled': False,
'filters': [],
'handlers': [],
'level': 10,
'manager': <logging.Manager object at 0x7f5355eb1160>,
'name': 'ClientDesktop.CApplicationStatus',
'parent': <logging.Logger object at 0x7f5359743668>,
'propagate': True}
您可以看到级别更改但没有登录文件。我也调试了日志库,我看到了loggin的检查已经过验证,因为我没有更改文件路径参数,我希望它能继续工作。
感谢您的帮助
修改 正如bruno desthuilliers的回答中所解释的,我的处理程序有一个父
logging.getLogger('my-app')
其中定义了所有处理程序。将父级别和所有处理程序级别设置为新值即可。
感谢。
答案 0 :(得分:0)
您的self.logger
没有处理程序,所以它实际上只委托(“传播”)它的父级。如果所有父级别都高于DEBUG
,则该消息将被丢弃。
此外,处理程序也具有级别,因此即使记录器的级别设置为DEBUG
,处理程序仍将根据自己的级别过滤消息。这允许为同一记录器提供不同级别的不同处理程序,但也可能导致丢弃消息。
你没有提供足够的信息(这里是你的整个日志配置),以肯定地说明这是你问题的原因,但鉴于问题的描述,这是最明显的罪魁祸首。