[英]How to print current logging configuration used by the python logging module?
我正在使用 python logging
模块。
我使用logging.dictConfig()
更新日志配置。
我想要一种方法来读取每个记录器使用的当前配置(例如级别)并打印它。
如何获取和打印此信息?
根据Simeon 的评论, logging_tree 包允许您打印出当前日志记录配置的详细信息。
>>> import logging
>>> 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
>>> # Get the same display as a string:
>>> from logging_tree.format import build_description
>>> print(build_description()[:50])
<--""
Level WARNING
|
o<--"a"
| Leve
日志配置存储在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'>}
如果您想要的是特定记录器的日志记录级别,那么您可以使用 - logger.getEffectiveLevel()
,这将为记录器的当前日志记录级别提供整数值,然后您可以将其与logging.getLevelName()
,以获取该级别的字符串表示形式。
例子 -
>>> import logging
>>> l = logging.getLogger(__name__)
>>> l.setLevel(logging.DEBUG)
>>> logging.getLevelName(l.getEffectiveLevel())
'DEBUG'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.