如何在 Python 的日志中記錄異常的 traceback 信息?
你好,我是征哥,寫 Python 的你可能會(huì)遇到這種情況,你知道程序報(bào)錯(cuò)了,因?yàn)檫@個(gè)異常沒(méi)有被捕捉,也不知道哪行代碼出錯(cuò)了,只能手工運(yùn)行一下看看哪里錯(cuò)了,但是,這個(gè)異常很難再次復(fù)現(xiàn)。
要是在日志中記錄了這個(gè)異常的 traceback 信息就好了。
本文就分享一下兩個(gè)方法,記錄異常的?traceback?信息。
方法一:使用 logger.exception
logger.exception 方法可以將異常的 traceback 信息記錄到日志里,這里有一個(gè)小小的例子:
import?logging
logging.basicConfig(
????filename="./demo.log",
????level=logging.DEBUG,
????format="%(asctime)s?%(levelname)s?%(message)s",
????datefmt="%Y-%m-%d?%H:%M:%S",
)
def?func1():
????logging.info("func1?called")
????1?/?0
def?func2():
????print("func2?called")
def?main():
????func1()
????func2()
if?__name__?==?"__main__":
????try:
????????main()
????except?Exception?as?e:
????????logging.exception(f"main?exception:?{str(e)}")
????????raise
執(zhí)行該代碼之后,你會(huì)在當(dāng)前路徑下看到 demo.log 文件,其內(nèi)容如下:

這樣當(dāng)發(fā)生異常時(shí),詳細(xì)信息可以在日志中看到。上述代碼里面用的是 logging.exception,使用 logger 也是可以的:
logger?=?logging.getLogger()
try:
????do_something()
except?Exception?as?e:
????logger.exception("some?message")
方法二:使用標(biāo)準(zhǔn)庫(kù) traceback
導(dǎo)入標(biāo)準(zhǔn)庫(kù) traceback 后,我們還可以這樣來(lái)記錄異常的詳細(xì)信息:
import?traceback
#?此處代碼和方法一一樣
if?__name__?==?"__main__":
????try:
????????main()
????except?Exception?as?e:
????????logging.error(f"main?Exception:?{traceback.format_exc()}")
????????raise
這樣,運(yùn)行結(jié)果和方法一是一樣的,其中 traceback.format_exc 打印的就是異常的詳細(xì)信息。

最后的話
本文分享了日志記錄異常的方法,如果覺(jué)得有幫助,請(qǐng)點(diǎn)贊、轉(zhuǎn)發(fā)、在看。如果技術(shù)問(wèn)題歡迎添加微信「somenzz」,回復(fù)「技術(shù)交流」,拉你加入純技術(shù)交流群,一起討論。
推薦閱讀:
評(píng)論
圖片
表情
