我有一个配置文件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
模块的两个实用程序fileConfig
和dictConfig
接受两种不同的格式。有没有办法在这两种格式之间转换?如果是这样,怎么办?
答案 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
键