You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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'。

额外需要修正的两个问题

  1. StreamHandler的参数格式错误:args=(sys.stdout)需要改为args=(sys.stdout,),因为构造参数要求是元组,缺少逗号会被识别为单个对象而非元组。
  2. 日志格式字段不存在:%(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:53:10