python - 获取当前(或基本)python 日志记录配置作为字典

标签 python logging configuration yaml

我正在使用 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/

相关文章:

MySQL & Play 框架 - 数据库配置

configuration - 配置 VSCode 执行不同的任务

python - 尝试合并视频时 Ffmpeg 无效数据

Python运行命令行(时间)

python - 如何加速 Flask 应用程序的 JSON 速度?

python - 如何使用运算符(operator)进行logging.debug?

python - 将 numpy.ndarray 转换为字符串(或字节)并将其转换回 numpy.ndarray

spring - Spring session 范围 Controller 中的 transient 字段

python - 在 Python 中为不同进程记录单独的文件

java - Zookeeper Network Ensemble 未正确启动