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

使用Python标准logging模块时触发KeyError: 'level'问题求助

问题解决:logging模块KeyError: 'level'

错误原因

你在控制台日志的格式字符串里使用了%(level)s,但Python logging的日志记录对象(Record)中不存在这个属性,正确的级别名称占位符应为%(levelname)s(对应INFO、DEBUG这类级别名称),级别数字占位符为%(levelno)s,这就是触发KeyError的直接原因。

修复后的完整代码

import time
import logging
import logging.handlers
import os

# 提前创建logs目录,避免文件写入失败
os.makedirs("logs", exist_ok=True)

logger = logging.getLogger("MyLog")
logger.setLevel(level=logging.DEBUG)

# StreamHandler 控制台输出
# 修正格式占位符:%(level)s → %(levelname)s
formatter = logging.Formatter("%(levelname)s %(asctime)s: %(message)s")
stream_handler = logging.StreamHandler()
stream_handler.setLevel(level=logging.INFO)
stream_handler.setFormatter(formatter)

# FileHandler 文件输出
formatter_file = logging.Formatter("[%(levelname)s|%(module)s|L%(lineno)d] %(asctime)s: %(message)s")
timestr = time.strftime("%Y%m%d-%H%M%S")
logFilePath = f"logs/Logs_{timestr}.log"
# 补充TimedRotatingFileHandler的分割参数,实现按小时自动切割日志
file_handler = logging.handlers.TimedRotatingFileHandler(
    filename=logFilePath,
    when="H",
    interval=1,
    backupCount=24
)
file_handler.setLevel(level=logging.DEBUG)
file_handler.setFormatter(formatter_file)

logger.addHandler(file_handler)
logger.addHandler(stream_handler)

logger.debug("This is a debug message")
logger.info("This is a info message")
logger.warning("This is a warning message")
logger.error("This is a error message")

额外提示

  1. 新增os.makedirs("logs", exist_ok=True),避免因logs目录不存在导致日志写入失败
  2. 给TimedRotatingFileHandler补充了when、interval、backupCount参数,实现按小时自动分割日志并保留最近24个文件,可根据需求调整(比如when="D"改为按天分割)

内容的提问来源于stack exchange,提问作者Amazonian_panda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:04:53