2015-07-02 25 views
1

我在这里有点遗憾。我可以发誓我上周早些时候有这项工作。今天我已经回到它,似乎无法登录工作。Python日志记录模块不尊重低于'30'(警告)的setLevel?

在下面的示例脚本中,我希望能够展示我的问题的相对完整的示例。

test.py

import logging 
logger = logging.getLogger() 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.warning("Testing Warning") 
logger.setLevel(60) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.error("Testing Error") 
logger.setLevel(50) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.error("Testing Error") 
logger.setLevel(40) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.error("Testing Error") 
logger.setLevel(30) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.info("Testing Info") 
logger.setLevel(20) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.info("Testing Info") 
logger.setLevel(10) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.info("Testing Info") 
logger.setLevel(0) 
print("Logger currently at level '{0}'".format(logger.getEffectiveLevel())) 
logger.info("Testing Info") 

输出

Logger currently at level '30' 
Testing Warning 
Logger currently at level '60' 
Logger currently at level '50' 
Logger currently at level '40' 
Testing Error 
Logger currently at level '30' 
Logger currently at level '20' 
Logger currently at level '10' 
Logger currently at level '0' 

我不知道为什么日志模块行事方式不同,考虑到我使用this的官方文档来尝试做它发生了。你可以在接近尾声时看到它如何公然忽略logger的等级。我有点绕过logger,而不是默认登录?我不明白。

谢谢!

+1

我更新了我的回答以回应您的评论。 –

回答

1

你忘了给你的记录器添加一个处理程序。在Python 3.3(及更高版本)中,如果没有指定处理程序,则使用内部"handler of last resort",其级别为WARNING。所以即使你的消息是通过记录器发送的,它们会被内部处理程序丢弃(这只是为了纠正错误配置)。在Python 2.x中,您将得到一个打印到stderr - No handlers could be found for logger "root"的一次性消息。

如果第一次打印之前添加一行

logger.addHandler(logging.StreamHandler()) 

,你会得到的行为是这样的:

Logger currently at level '30' 
Testing Warning 
Logger currently at level '60' 
Logger currently at level '50' 
Logger currently at level '40' 
Testing Error 
Logger currently at level '30' 
Logger currently at level '20' 
Testing Info 
Logger currently at level '10' 
Testing Info 
Logger currently at level '0' 
Testing Info 

更新:没有必要为“手动添加处理程序” - 这只是说明问题的最简单方法。您可以使用basicConfig()简单配置日志记录(控制台或文件,有限选项)或使用dictConfig()进行更灵活的配置。这些方法在Python 2.7和3.2(及更高版本)中以相同的方式工作。

+0

谢谢!这工作出色。我学到了一些新东西。我习惯Python 2超过3,但也习惯于比Java更多的Java。 “手动附加处理程序”是Python 3中所有东西的标准方法吗? – jwarner112

+0

优秀的附录!我会进一步阅读,非常感谢! – jwarner112

相关问题