Python日志无法捕获运行错误:请求排查方案
问题分析与解决方案
你的代码存在几个关键问题,导致错误信息没有被日志捕获:
1. Python 2 不支持 logging.basicConfig 的 force 参数
force=True 是 Python 3.8 才新增的参数,在 Python 2 中使用会直接抛出 TypeError,导致日志配置失败——这也是你看不到任何日志的核心原因之一,程序在配置日志阶段就出错了,但这个错误也没被记录。
2. 未被捕获的顶层异常不会自动被 logging 记录
代码里的 pprint("test") 因为没有导入 pprint 模块会触发 NameError,但默认情况下 logging 不会主动捕获这类未被 try-except 包裹的顶层异常,需要手动添加异常处理逻辑。
3. 缺少必要的模块导入
使用 pprint 前未导入该模块,本身就会触发错误,但因为前面的日志配置问题,这个错误也没被记录。
修改后的代码示例
import logging import sys import pprint # 导入要使用的模块 # 清理 root handler(Python 2 中该写法有效) for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) # Python 2 移除不支持的 force 参数,添加日志格式方便排查问题 logging.basicConfig( filename="directory/logs.txt", level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s' ) # 全局异常钩子:捕获所有未处理的异常并写入日志 def handle_uncaught_exception(exc_type, exc_value, exc_traceback): # 忽略键盘中断(Ctrl+C) if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logging.critical("未捕获的异常", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_uncaught_exception import pandas as pd # 其他模块导入... # 测试代码 pprint("test")
额外说明
- 如果需要捕获 Python 的警告信息(如
DeprecationWarning),可以添加logging.captureWarnings(True),将警告转发到日志系统。 - 确保
directory/logs.txt的路径存在,否则程序会抛出文件写入错误,同样可以通过上述异常钩子捕获。
内容的提问来源于stack exchange,提问作者user2355903
相关产品推荐
相关产品推荐

