python logging and handler usage
我试图理解Python日志记录的工作方式。
我得到它是一个单例实例,适用于整个正在运行的解释器。
我有这个功能:
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
我用这个打电话:
1 2 3 4 5 | 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处打印到console(console上应该有stderr和stdout)。
所以,很明显我遗漏了日志程序与系统或流处理程序交互的方式。
我的目标是当streamHandler的级别是调试时,所有内容都将打印到控制台,但我还想了解这不起作用的原因。
好的,这里回答了这个问题:记录setlevel,它是如何工作的
总结一下:添加处理程序的日志程序需要处于处理程序的级别或更低级别,否则日志程序会在消息传递给处理程序之前拒绝该消息。
所以我要做的是将basicconfig默认值设置为debug,而不是警告。然后,如果我想添加另一个只处理警告及以上内容的处理程序,我会这样做,而不是将其保留为默认值。