我试图了解 python 日志记录的工作方式。
我知道它是一个适用于整个正在运行的解释器的单例实例。
我有这个功能:
def setup_logging(options=None):
'''setup the logger and return it'''
logging.basicConfig(level=logging.WARNING,
format='%(levelname)s: %(message)s',
filename='/tmp/pluser.log')
logger = logging.getLogger('pluser')
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
print(console.level)
logger.addHandler(console)
return logger
我用这个调用:
console = setup_logging(options)
console.debug('Initializing database')
connect_to_db()
console.debug('Database initialized')
(这是为在不同的地方进行更多的日志记录做准备。)
现在,“console”是一个“logging.Logger”实例。它有一个 StreamHandler。该流处理程序的级别为 10(即 logging.DEBUG)。但是,那个 StreamHandler 似乎没有收到消息,因为事情只会在 console.warning、error 或 critical 打印到控制台(上面应该有 stderr 和 stdout)。
因此,我显然遗漏了记录器与系统或 StreamHandler 交互的方式。
我的目标是当 StreamHandler 的级别是调试时,所有内容都打印到控制台,但我也想了解为什么这不起作用。