我试图理解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。该streamhandler的级别为10(即logging.DEBUG)。然而,那个StreamHandler似乎并没有得到消息,因为东西只打印到控制台(控制台上应该有stderr和stdout)。警告、错误或严重的。
因此,我显然忽略了记录器与系统或StreamHandler交互的方式。
我的目标是当StreamHandler的级别是调试时,所有内容都会打印到控制台,但我也想了解为什么这不起作用。
好的,这里回答了这个问题:记录setLevel,它是如何工作的
总而言之:添加处理程序的记录器需要处于处理程序级别或更低级别,否则记录器会在消息传递给处理程序之前拒绝该消息。
所以我要做的是将basicConfig默认设置为DEBUG,而不是警告。如果我想添加另一个只处理警告和更高级别的处理程序,我会这样做,而不是将其保留为默认值。