使用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")
额外提示
- 新增
os.makedirs("logs", exist_ok=True),避免因logs目录不存在导致日志写入失败 - 给
TimedRotatingFileHandler补充了when、interval、backupCount参数,实现按小时自动分割日志并保留最近24个文件,可根据需求调整(比如when="D"改为按天分割)
内容的提问来源于stack exchange,提问作者Amazonian_panda
相关产品推荐
相关产品推荐

