我已经看到logger模块的一些非常奇怪的行为。它以一个相对复杂的项目开始,但是现在我已经看到了以下脚本:
import logging
import os
# Uncomment the following line to remove handlers
# logging.getLogger().handlers = []
filePath = os.environ['userprofile'] + r'\Documents\log.txt'
logging.basicConfig(filename=filePath)
logging.debug('Gleep')
logging.shutdown()
这应该只是将log.txt文件中的“ Gleep”写入文档。目前,它正在写入文件,但未对其写入任何内容,但是,我不一致地看到了以下行为:
我之前使它起作用的唯一方法是删除现有的处理程序(在上面的示例中进行了注释)。 这是在不同位置的多台计算机上。
所以...我在这里做错什么了吗?为什么日志记录模块以这种方式起作用?
答案 0 :(得分:2)
我不确定如何证明/反驳/调试您的“其他”情况,但是也许以下内容可以帮助您弄清问题中代码中正在发生的事情:
首先,不需要设置 var dataString = new formData();
dataString.append('usereaddr', instockemailadr);
dataString.append('sku',instockpid);
//...
data: dataString,
success: function(){
,因为logging.getLogger().handlers = []
默认情况下是根记录器,并且没有处理程序。这是一个新鲜的Python 3.7 shell:
logging.getLogger()
(请注意,在没有任何处理程序的情况下,记录器将退回到lastResort
,但这在这里是不相关的,因为您通过>>> import logging
>>> logging.getLogger()
<RootLogger root (WARNING)>
>>> logging.getLogger().handlers
[]
隐式添加了处理程序。)
将您带到basicConfig()
:这将为根记录器添加一个logging.basicConfig(filename=filePath)
处理程序。它不会影响根记录器的级别,默认情况下为 FileHandler
,因此您的邮件不会通过“级别测试”,也不会因此而发出。
WARNING
(这使用>>> logging.root.getEffectiveLevel()
30
而不是普通属性,因为记录器将遍历其层次结构,直到找到其级别为.getEffectiveLevel()
为止。)
这就是说:就像您当前所拥有的那样,您正在从根记录程序(级别NOTSET
)中记录级别为WARNING
的消息对象,因此消息将无处可寻。 / p>