有没有一种方法可以将使用“ fileConfig”读取的日志记录配置格式转换为“ dictConfig”所需的格式?

时间:2019-08-14 21:25:07

标签: python logging

我有一个配置文件config.ini,如下所示

[loggers]
keys=root

[handlers]
keys=consoleHandler

[formatters]
keys=sampleFormatter

[logger_root]
level=INFO
handlers=consoleHandler

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=sampleFormatter
args=(sys.stderr,)

[formatter_sampleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

我正在从我的Python脚本中读取内容,如下所示:

import logging

logging.config.fileConfig(fname="config.ini", disable_existing_loggers=False)

现在,我想将以上文件中读取的这种格式作为字典发送。因此,我使用configparser来读取此文件,然后按如下所示将其转换为字典,

import configparser

parser = configparser.RawConfigParser()
parser.read(filenames="config.ini")
conf_dict = {section: dict(parser.items(section)) for section in parser.sections()}

然后,我了解到logging模块的dictConfig需要密钥version,所以我将其添加如下,

conf_dict["version"] = 1

然后,我尝试按以下方式将此字典读入dictConfig

logging.config.dictConfig(config_dict)

但是,这将导致以下错误,

  File "run.py", line 41, in load
    logging.config.dictConfig(config_dict)
  File "/python3.7/logging/config.py", line 799, in dictConfig
  File "/python3.7/logging/config.py", line 545, in configure
ValueError: Unable to configure formatter 'keys'

这似乎表明logging模块的两个实用程序fileConfigdictConfig接受两种不同的格式。有没有办法在这两种格式之间转换?如果是这样,怎么办?

2 个答案:

答案 0 :(得分:0)

否,标准库中没有解析器可以提取ini文件并吐出dictConfig兼容字典。您将必须创建自己的json文件格式来填充字典。

您可以找到一个不错的JSON文件示例here

答案 1 :(得分:0)

从Python 3.7开始,两个(dictConfig和fileConfig)不能等效表示。例如,“ args”键只能与fileConfig一起提供。当与dictConfig一起提供时,它将被忽略。

作为旁注,我在尝试为dictConfig指定“ args”时碰到了这一点,以便我可以为FileHandler指定使用环境变量的文件路径。

参考: config.py

_install_handlers-寻找args键进行评估

configure_handler-在字典中不寻找args