joh*_*mcp 4 python logging error-logging
我试图了解将 basicConfig 与多个处理程序一起使用时日志记录模块的行为。
我的目标是对系统日志消息设置警告级别,对日志文件设置调试级别。
这是我的设置:
import logging
import logging.handlers
import os
from datetime import datetime
log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
f_handler = logging.FileHandler(f'{os.path.expanduser("~")}/logs/test_{datetime.now().strftime("%Y%m%d%H%M%S")}.log')
s_handler = logging.handlers.SysLogHandler(address='/dev/log')
f_handler.setLevel(logging.DEBUG)
s_handler.setLevel(logging.WARN)
f_handler.setFormatter(log_format)
s_handler.setFormatter(log_format)
logging.basicConfig(handlers=[f_handler, s_handler])
print (logging.getLogger().getEffectiveLevel())
logging.warning('This is a warning')
logging.error('This is an error')
logging.info('This is an info')
logging.debug('This is debug')
Run Code Online (Sandbox Code Playgroud)
这不起作用 - 我的日志文件仅包含警告和错误消息,而不是预期的调试和信息消息。
如果我将此行更改为:
logging.basicConfig(handlers=[f_handler, s_handler], level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
那么这似乎确实有效,即该文件包含所有消息,而系统日志仅包含错误和警告消息。
我不明白为什么原始代码不起作用,因为我专门在文件处理程序上设置了级别。
这是因为您需要在记录器上设置一个级别,因为首先会检查该级别,如果需要进行进一步的处理,则该事件将传递给处理程序,并在处理程序中根据其级别进行检查。
请参阅下图了解更多信息。