python: 把异常崩溃写入日志文件
先声明,这不是教学也没有自称是最正统王道的做法。只是适用于我当前项目的情况。
背景:一个后台的守护进程,会对导入的批量文件进行轮询及列队处理。
这些目标文件可能有各种预期外的格式、数据类型不正确导致py崩溃中途退出。造成了队列堵塞
当发现堵塞时,手动去运行脚本可以查看到有问题的关键文件。但想找个办法让遇到问题是能跳过不阻塞队列,但保留错误信息到日志以便追查处理。
以下是我的处理办法。核心是用 try/exception
和 logging
捕获异常写入自定义日志文件。
import logging
# 设置输出错误日志
logging.basicConfig(filename='pyerr.log', filemode='w')
# 扫描待处理的目录,查找 docx文件
filelist = os.listdir(scan_path)
for dfile in filelist:
if dfile[-5:].lower() == ".docx":
try:
imp_result = mod_doc.import_db(scan_path+dfile) #这步是容易出现异常的导入复杂操作
# 导出处理结果的业务逻辑 略
except: #把异常写入日志文件
s = traceback.format_exc()
logging.error(dfile+'\n'+s)
else:
print("non docx file, skip:"+dfile)
仅作备忘,有关异常处理和日志处理的用法这里不展开说明。
业务逻辑中处理完毕的文档会被转移归档保存,所以剩下在目录里的则是异常的文件。
如想避免异常文件每轮的轮询仍被执行, 可以转移到特定文件夹并修改 logging.basicConfig 的 filemode 改为 'a' 使多个异常文档的错误信息不会被覆盖。