亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何優雅的解logging.error打印funcName的問題?

如何優雅的解logging.error打印funcName的問題?

Helenr 2019-04-13 08:36:41
logging.error是可以打印funcName的。具體應該是根據trace來做的?,F在我有這么個函數deferror(msg):logging.error(msg)sendEmail(msg)我用這個函數代替了logging.error,這導致所有本來要輸出funcName的地方,輸出了error這個函數。原理我是理解的。就是因為棧幀的問題。但是有沒有優雅的方式讓我重新打出真正報錯的函數?
查看完整描述

2 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

最暴力的方案:把logging.currentframe覆蓋掉!但是其它使用logging的模塊會出錯。
最靠譜的方案:使用自定義的Logger類,把其中的findCaller覆蓋掉。其實只需要把代碼復制過去,然后把f=f.f_back改成f=getattr(f.f_back,'f_back',None)這樣子就可以了。
                            
查看完整回答
反對 回復 2019-04-13
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

自己想了個不怎么優雅,但是也算是能用的方案
deferror(msg):
stack_trace=traceback.format_stack(inspect.currentframe())
caller_lineno=stack_trace[-2].split(",")[1]#-1iserror()self,-2iscaller
logging.error(caller_lineno+""+msg)#這里用了行號來舉例
sendEmail(msg)
利用和logging打行號/函數一樣的原理把行號打了出來,對于logging自己打的那個沒什么用的行號/函數就留著不管了。
                            
查看完整回答
反對 回復 2019-04-13
  • 2 回答
  • 0 關注
  • 523 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號