这段代码有什么问题?它将Whatsup输出到stdOut,而没有输出到/ tmp中的文件。它创建了文件,但是没有任何内容写入文件,即使在记录数据加载时也是如此(' w' * 20000)。并且在我检查之后似乎没有指定任何处理程序。
>>> logger.handlers
[]
>>> logger.warning("Whatsup")
Whatsup
>>>
import logging
import logging.config
import multiprocessing
import threadfilter
VERBOSE_LOGGING = 1
directory = '/tmp/'
configDict = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'detailed': {
'class': 'logging.Formatter',
'format': '%(asctime)s - %(levelname)s =%(threadName)s= - Completer: %(message)s'
}
},
'handlers': {
'fileH': {
'class': 'logging.FileHandler',
'filename': '%s/ZZZZZZZZZZ_dispatcher_jobComplete3r.log' % (directory),
'formatter': 'detailed'
}
},
'loggers': {
'root': {
'handlers': ['fileH'],
'level': VERBOSE_LOGGING
}
}
}
logging.config.dictConfig(configDict)
logger = logging.getLogger()
logger.handlers
logger.warning("Whatsup")
也没有抛出任何错误,它似乎默默地忽略了我的配置。
Python 3.6.1
答案 0 :(得分:1)
这出现在寻找同样的问题。像你一样,我解决了它,但做得与众不同。我认为值得一提的是谷歌将其他人拒之门外......
默认的“root”处理程序不称为“root”,它实际上是空白的,或者是None。
用None替换'root'(这是一个有效的dict键)使它适用于所有记录器,而不仅仅是“root”记录器。
答案 1 :(得分:0)
过早发布2秒。
我必须在我的getLogger调用中明确地调用根记录器的名称。 这就是诀窍:
logging.config.dictConfig(configDict)
logger = logging.getLogger('root')
logger.handlers
logger.warning("Whatsup")
抱歉!