python的logging模块不记录错误输出

查看:345
本文介绍了python的logging模块不记录错误输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我有个脚本需要不停地跑,已经使用logging的TimedRotatingFileHandler安装时间进行了切割,并且只保存最近两天的数据。以下是我logging定义的内容

log_fmt = '%(threadName)s %(asctime)s %(levelname)s %(message)s'
formatter = logging.Formatter(log_fmt)

log_file_handler = TimedRotatingFileHandler(filename='logs/'+myselfName, when="midnight", interval=1, backupCount=2)
log_file_handler.setFormatter(formatter)

logging.basicConfig(level=logging.INFO,format=log_fmt)
logger = logging.getLogger()
logger.addHandler(log_file_handler)

脚本跑了几天了,我发现个问题,如果代码报错(出bug了)是不会被记录到logging中的,这样的话,就导致我看不到什么原因报错了,只能看到代码执行到某个流程卡住了,有什么办法,可以看到报错的语句吗?

补充一下,我的程序背景可能比较好,我这个脚本是gevent协程库的一个脚本,也就是说其中一个协程可能报错了,但是不会影响整个程序中断,别的协程在接着跑,最后导致在客户端看到的数据就是某些字段缺失了或者字段没有被计算过

可能有人提醒我用try except 捕捉一下,这是知道报错的位置的前提用的方法,关键我不知道哪里有报错,想知道如果不用try except,有什么办法?

解决方案

如果不知道程序错在哪,还不能输出,又没办法DEBUG的话,确实处理起来比较麻烦。不过你可以使用原始一点的方法,在程序每个模块,或者某些关键的方法运行即将结束的结尾,加上一个with open('test.txt','a') as f: f.write('mark1:%s'%time.strftime('%Y-%m-%d %H:%M:%S')),按照程序运行的顺序mark2,mark3...,当程序运行结果不对的时候,你查看日志文件log.txt,看看是不是按照顺序mark1、2、3、4,哪个地方没有,那就是出错了,然后再针对性地try except就OK了。大体思路就是,既然logging库用不了,为什么不自己搞一个能用的日志系统呢?个人思路,仅供参考,不喜勿踩。

这篇关于python的logging模块不记录错误输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆