logging.config.dictConfig似乎不起作用

时间:2017-07-18 13:13:36

标签: python logging

这段代码有什么问题?它将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

2 个答案:

答案 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")

抱歉!