Python logging.error打印funcName有什么好方法,,logging.erro
Python logging.error打印funcName有什么好方法,,logging.erro
logging.error是可以打印funcName的。具体应该是根据trace来做的。
现在我有这么个函数
def error(msg): logging.error(msg) sendEmail(msg)
我用这个函数代替了logging.error,这导致所有本来要输出funcName的地方,输出了error这个函数。原理我是理解的。就是因为栈帧的问题。但是有没有优雅的方式让我重新打出真正报错的函数?
最暴力的方案:把 logging.currentframe 覆盖掉!但是其它使用 logging 的模块会出错。
最靠谱的方案:使用自定义的 Logger 类,把其中的 findCaller 覆盖掉。其实只需要把代码复制过去,然后把 f = f.f_back 改成 f = getattr(f.f_back, 'f_back', None) 这样子就可以了。
自己想了个不怎么优雅,但是也算是能用的方案
def error(msg): stack_trace = traceback.format_stack(inspect.currentframe()) caller_lineno = stack_trace[-2].split(",")[1] # -1 is error() self, -2 is caller logging.error(caller_lineno + " " + msg)#这里用了行号来举例 sendEmail(msg)
利用和logging打行号/函数一样的原理把行号打了出来,对于logging自己打的那个没什么用的行号/函数就留着不管了。
编橙之家文章,
相关内容
- Python方法实现xp系统访问远程接口程序思路是什么,p
- Python re正则表达式表示匹配大写字母与数字的问题,
- 新手求助关于Python多重继承调用疑惑,新手python疑惑
- Python支持移动端提供API那个框架好用,pythonapi,IOS,andr
- 要使用nose框架来测试django可行吗?,nosedjango,请问我是用
- Python 调用C程序求指导,python调用c程序,我的c程序返回
- 请问Python中gevent celery redis用处与区别,geventredis,在py
- 新手python 连接redis问题,pythonredis,pythonimport
- Flask小程序Dockerfile找不到目标问题,flaskdockerfile,这是我
- Python Requests爬取目标网页代码,求神帮看下源码,pyt
评论关闭