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

如何为Python滚动日志添加时间戳及错误信息?

解决Python滚动日志的时间戳和错误记录问题

你的问题出在两个地方:没有给日志处理器设置格式器(所以仅显示消息文本),没有正确使用日志方法捕获错误信息。以下是具体修复方案:

1. 添加带时间戳的日志格式

给RotatingFileHandler绑定一个Formatter,自定义日志输出结构,包含时间戳、日志级别、日志内容等信息。常用格式示例:%(asctime)s - %(levelname)s - %(message)s,其中%(asctime)s就是自动生成的时间戳。

2. 记录错误信息

当代码抛出异常时,使用logger.exception()方法,它会自动附加异常的堆栈跟踪信息;若仅需记录错误描述,也可使用logger.error()并指定exc_info=True参数。

修改后的完整代码

import logging
from logging.handlers import RotatingFileHandler

logger = logging.getLogger("Rotating Log")
logger.setLevel(logging.DEBUG)

# 防止重复添加处理器(多次运行代码时避免日志重复输出)
if not logger.handlers:
    path = "Logs/Process.log"  # 建议用正斜杠,避免Windows路径转义问题
    handler = RotatingFileHandler(path, maxBytes=2000000, backupCount=5)
    
    # 定义日志格式,包含时间戳
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    handler.setFormatter(formatter)
    
    logger.addHandler(handler)

# 调试日志示例
logger.debug("Debug log message")

# 错误日志示例(捕获异常场景)
try:
    # 模拟出错代码
    1 / 0
except ZeroDivisionError:
    # 记录异常及堆栈跟踪
    logger.exception("触发除零错误")
    # 若不需要堆栈,可改用:logger.error("触发除零错误", exc_info=False)

关键细节说明

  • 自定义时间格式:如果默认的%(asctime)s格式(YYYY-MM-DD HH:MM:SS,mmm)不符合需求,可通过datefmt参数调整,比如:formatter = logging.Formatter("%Y-%m-%d %H:%M:%S - %(levelname)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
  • logger.exception():仅在异常捕获块中使用,会自动记录错误堆栈,大幅提升问题排查效率
  • if not logger.handlers:判断:避免多次初始化日志器时重复添加处理器,导致同一条日志被多次写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:15:43