我正在使用 Python 标准日志记录配置,结合 yaml
使用 dictConfig()
函数加载配置文件:
import logging
import yaml
with open('logging.yaml','r') as f:
logConfig = yaml.safe_load(f.read())
logging.config.dictConfig(logConfig)
自 an incremental logging configuration in python limits the capabilities ,每个日志文件都必须包含最少量的信息,如下所示:
version: 1
formatters:
simple:
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
loggers:
my_module:
level: ERROR
root:
level: INFO
handlers: [console]
这要么迫使人们记住它,将其存储在某个地方,要么每次都查找它。由于这些都不适合我,我想找到一种生成它的方法。这让我想到了这个问题:
有没有办法将当前(或基本)日志记录配置作为字典获取?
这将使通过运行以下代码一次来制作初始配置文件变得容易,并且只需删除/编辑您想要的内容:
import logging
import yaml
logConfig = logging.get_current_config_as_a_dictionary()
with open('logging.yaml','w') as f:
f.write(yaml.dump(logConfig))
当然,Yaml 只是我个人的偏好,同样的问题可以针对 JSON 之类的内容发布。
最佳答案
我不确定是否有一种干净的方法可以通过任何公共(public) logging
函数来做到这一点。查看包 CPython source ,默认值不会被搁置并在任何结构(例如字典)中整齐地定义。相反,它们被硬编码到函数 logging.basicConfig
中.具体来说,此函数包含一些常见的“默认”设置关键字,但不幸的是,出于您的目的,这些被硬编码到函数中。例如:
style = kwargs.pop("style", '%')
这使用 root
记录器(它本身是 root = RootLogger(logging.WARNING)
)并向其添加一些配置。
处理它的一种方法(实际上并不理想)是在调用 logging 之前和之后查看绑定(bind)到
*。例如:logging.root
的“之前和之后”配置。基本配置()
>>> root = logging.root
>>> root.handlers
[]
>>> logging.basicConfig()
>>> root.handlers
[<StreamHandler <stderr> (NOTSET)>]
最后,我想提一下默认样式来自:
logging._STYLES['%']
结果为 %(levelname)s:%(name)s:%(message)s
。
*如果您不带任何参数调用此函数,实际上并没有完成很多工作;主要变化是向根记录器添加一个 StreamHandler
(stdout),然后向其添加一个 Formatter
。
关于python - 获取当前(或基本)python 日志记录配置作为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034739/