如何修复Python中logging.ini的KeyError: 'formatters'报错?
问题:Python logging.ini配置文件加载时出现KeyError: 'formatters'
我参考了相关日志教程及Python官方文档,创建了如下logging.ini文件:
[loggers] keys=root [handlers] keys=consoleHandler [formatters] keys=extend [logger_root] level=INFO handlers=consoleHandler propagate=0 [handler_consoleHandler] class=StreamHandler level=INFO formatter=extend args=(sys.stdout) [formatter_extend] format=%(asctime)s - %(worker)s - %(levelname)s - %(message)s
在Python代码中按如下方式调用:
import logging.config logging.config.fileConfig(fname='logger.ini')
运行时出现如下错误:
logging.config.fileConfig(fname='logger.ini') /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/logging/config.py:71: in fileConfig formatters = _create_formatters(cp) /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/logging/config.py:104: in _create_formatters flist = cp["formatters"]["keys"] /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/configparser.py:963: in __getitem__ raise KeyError(key) E KeyError: 'formatters'
我的环境是MacOS系统、Python3.9.6版本,请问哪里遗漏了?
解决方案
核心问题:配置文件名不匹配
你代码里加载的是logger.ini,但实际创建的配置文件叫logging.ini,Python找不到正确的配置文件,导致解析失败,抛出KeyError: 'formatters'。
额外需要修正的两个问题
- StreamHandler的参数格式错误:
args=(sys.stdout)需要改为args=(sys.stdout,),因为构造参数要求是元组,缺少逗号会被识别为单个对象而非元组。 - 日志格式字段不存在:
%(worker)s是自定义字段,默认日志对象没有这个属性,会导致后续日志输出时抛出KeyError: 'worker',可以替换为默认存在的字段(比如%(name)s),或者在输出日志时通过extra参数传入该字段的值。
修正后的配置文件和代码
修正后的logging.ini
[loggers] keys=root [handlers] keys=consoleHandler [formatters] keys=extend [logger_root] level=INFO handlers=consoleHandler propagate=0 [handler_consoleHandler] class=StreamHandler level=INFO formatter=extend args=(sys.stdout,) [formatter_extend] format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
修正后的调用代码
import logging.config # 确保文件名与实际配置文件一致 logging.config.fileConfig(fname='logging.ini') # 测试日志输出 logger = logging.getLogger() logger.info("测试日志内容")
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

