我看到一些非常奇怪的行为与记录器模块。一开始是一个相对复杂的项目,但现在我看到了以下脚本:
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()
这只需将“Gleep”写入log.txt文件到您的文档中。当前它正在写入文件,但没有向其中写入任何内容,但是,我不一致地看到以下行为:
我以前让它工作的唯一方法是删除现有的处理程序(在上面的示例中注释掉)。 这在不同位置的多台机器上进行
那么…我是不是做错什么了?为什么日志模块是这样工作的
我不确定如何证明/反驳/调试您的“其他”情况,但以下内容可能有助于从您的问题中澄清代码中发生了什么:
首先,设置
logging.getLogger().handlers = []
应该而不是是必要的,因为logging.getLogger()
在默认情况下是根记录器,并且没有处理程序。下面是一个新的Python 3.7 shell:(请注意,在没有任何处理程序的情况下,记录器将返回到^{} ,但这与此无关,因为您通过
basicConfig()
隐式添加了处理程序。)这将带您到
logging.basicConfig(filename=filePath)
:这将向根记录器添加一个FileHandler
处理程序。它不触及根记录器的级别,默认情况下为WARNING
,因此您的消息不会通过“级别测试”,也不会因此而发出(这将使用
.getEffectiveLevel()
而不仅仅是plain属性,因为如果日志记录器的级别是NOTSET
,它将遍历其层次结构直到找到一个级别。)所有这一切都意味着:正如您当前所拥有的,您正在从根记录器(level
WARNING
)记录一个具有levelDEBUG
的消息对象,因此消息将不存在相关问题 更多 >
编程相关推荐