如何打印python日志记录模块使用的当前日志记录配置?

时间:2015-07-23 23:46:44

标签: python logging

我正在使用python日志记录模块。

我使用logging.dictConfig()更新日志配置。

我想要一种方法来读取每个记录器使用的当前配置(例如级别)并打印它。

如何获取和打印此信息?

3 个答案:

答案 0 :(得分:4)

Simeon's commentlogging_tree package,您可以打印出当前日志记录配置的详细信息。

>>> logging.getLogger('a')
>>> logging.getLogger('a.b').setLevel(logging.DEBUG)
>>> logging.getLogger('x.c')
>>> from logging_tree import printout
>>> printout()
<--""
   Level WARNING
   |
   o<--"a"
   |   Level NOTSET so inherits level WARNING
   |   |
   |   o<--"a.b"
   |       Level DEBUG
   |
   o<--[x]
       |
       o<--"x.c"
           Level NOTSET so inherits level WARNING

答案 1 :(得分:3)

如果您想要的是特定记录器的日志记录级别,那么您可以使用 - logger.getEffectiveLevel(),这将为记录器的当前日志记录级别提供整数值,然后您可以将其用于{ {3}},获取该级别的字符串表示。

示例 -

>>> import logging
>>> l = logging.getLogger(__name__)
>>> l.setLevel(logging.DEBUG)
>>> logging.getLevelName(l.getEffectiveLevel())
'DEBUG'

答案 2 :(得分:3)

记录配置存储在logging.root.manager中。

您可以从那里访问每个日志记录参数,例如:logging.root.manager.root.level以获取根记录器的日志记录级别。

可以通过logging.root.manager.loggerDict['logger_name']访问任何其他记录器。

以下是有关如何获取自定义记录器使用的格式化程序的示例:

>>> import logging
>>> import logging.config
>>> config = {"version": 1,
...     "formatters": {
...         "detailed": {
...             "class": "logging.Formatter",
...             "format": "%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s"}},
...     "handlers": {
...         "console": {
...             "class": "logging.StreamHandler",
...             "level": "WARNING"},
...         "file": {
...             "class": "logging.FileHandler",
...             "filename": "mplog.log",
...             "mode": "a",
...             "formatter": "detailed"},
...         "foofile": {
...             "class": "logging.handlers.RotatingFileHandler",
...             "filename": "mplog-foo.log",
...             "mode": "a",
...             "formatter": "detailed",
...             "maxBytes": 20000,
...             "backupCount": 20}},
...     "loggers": {
...         "foo": {
...             "handlers": ["foofile"]}},
...     "root": {
...         "level": "DEBUG",
...         "handlers": ["console", "file"]}}
>>> logging.config.dictConfig(config)
>>> logging.root.manager.loggerDict['foo'].handlers[0].formatter._fmt
'%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'

处理程序参数也可以在logging._handlers.data中找到。

>>> logging._handlers.data['file']().__dict__
 {'baseFilename': '/File/Path/mplog.log',
  'mode': 'a',
  'encoding': None,
  'delay': False,
  'filters': [],
  '_name': 'file',
  'level': 0,
  'formatter': <logging.Formatter object at 0x7ff13a3d6df0>,
  'lock': <unlocked _thread.RLock object owner=0 count=0 at 0x7ff13a5b7510>,
  'stream': <_io.TextIOWrapper name='/File/Path/mplog.log' mode='a' encoding='UTF-8'>}