如何为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
相关产品推荐
相关产品推荐

