如何从Python中的logging.formatter对象获取格式化程序字符串?

Shu*_*man 6 python logging

嗨,我想做一个日志管理员gui.基本上我想得到记录器的树形结构,并在pyqt gui中显示它们的级别和格式化程序.如何从与处理程序对象关联的格式化程序中获取格式字符串?

例如:

import logging
_logger = logging.getLogger('myLogger')

ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
formatter = logging.Formatter('%(name)s:%(levelname)s: %(message)s')
ch.setFormatter(formatter)
_logger.addHandler(ch)
_logger.propagate=0
Run Code Online (Sandbox Code Playgroud)

现在我有_logger,如何从logging.Formatter对象中获取字符串'%(name)s:%(levelname)s:%(message)s'?

>>> _logger.handlers[0]
<logging.StreamHandler object at 0x13807610>
>>> _logger.handlers[0].formatter
<logging.Formatter object at 0x13807690>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 12

logging.Formatter实例有一个_fmt属性:

>>> _logger.handlers[0].formatter
<logging.Formatter object at 0x102c72fd0>
>>> _logger.handlers[0].formatter._fmt
'%(name)s:%(levelname)s: %(message)s'
Run Code Online (Sandbox Code Playgroud)

您始终可以使用dir()vars()在对象上查看可用的名称:

>>> vars(_logger.handlers[0].formatter)
{'datefmt': None, '_fmt': '%(name)s:%(levelname)s: %(message)s'}
Run Code Online (Sandbox Code Playgroud)

或者您可以查看源代码(从模块文档的顶部链接).