Python實(shí)現(xiàn)打印詳細(xì)報(bào)錯(cuò)日志,獲取報(bào)錯(cuò)信息位置行數(shù)
Python打印詳細(xì)報(bào)錯(cuò)日志,獲取報(bào)錯(cuò)信息位置行數(shù)
源于: 功能類代碼 – Logsetclass.py
網(wǎng)上代碼1
# 日志模塊 import logging import traceback # 引入日志 logging.basicConfig(filename='log_record.txt', level=logging.DEBUG, filemode='w', format='[%(asctime)s] [%(levelname)s] >>> %(message)s', datefmt='%Y-%m-%d %I:%M:%S') try: print(a+1) # 放主要代碼 except Exception as e: logging.error("Main program error:") logging.error(e) logging.error(traceback.format_exc())
結(jié)果為:
網(wǎng)上代碼2
- logging模塊可以實(shí)現(xiàn)Python程序的錯(cuò)誤日志功能。
- 通過使用baseConfig()函數(shù)就可以對(duì)logging進(jìn)行一個(gè)日志配置。
- 包括輸出的格式和錯(cuò)誤等級(jí),記錄的文件目錄
使用 Python
的 logging
模塊能很好的幫我們完成程序的錯(cuò)誤日志功能。
- 像其它的語(yǔ)言那樣,
python
里的logging
信息同樣也是分為5個(gè)等級(jí),從低到高依次是:DEBUG,INFO,WARNING,ERROR,CRITICAL
- python中,
logging
由logger,handler,filter,formater
四個(gè)部分組成,logger是提供我們記錄日志的方法;handler是讓我們選擇日志的輸出地方,如:控制臺(tái),文件,郵件發(fā)送等,一個(gè)logger
添加多個(gè)handler
;filter是給用戶提供更加細(xì)粒度的控制日志的輸出內(nèi)容;formater用戶格式化輸出日志的信息。 - logger的級(jí)別劃分,python中, root是默認(rèn)的最高級(jí)別的,其它的logger的級(jí)別通過"."來劃分等級(jí),如:bao,bao.a,bao.b三個(gè)logger,bao.a和bao.b都的級(jí)別都低于bao,依此類推。
python中配置logging有三種方式
- 在程序中完成logger,handler,filter,formater的實(shí)例化 被配置好logging,然后再使用logging取得logger進(jìn)行日志操作。
- 使用配置文件的方式配置logging,使用
fileConfig(filename,defaults=None,disable_existing_loggers=Ture )
函數(shù)來讀取配置文件。 - 使用一個(gè)字典方式來寫配置信息,然后使用
dictConfig(dict,defaults=None,disable_existing_loggers=Ture)
函數(shù)來瓦按成logging 的配置 。(這個(gè)方式?jīng)]有仔細(xì)看,所以沒有怎么說,具體可以看文檔)
注意: 在使用第二種和三種方式配置logging的時(shí)候,第三個(gè)參數(shù)默認(rèn)值是True,當(dāng)它為True的時(shí)候,在這之前定義的logging配置就是失效,不能再使用,也就是只有配置文件或者配置字典里有的內(nèi)容才能使用。如果先讓之前的logging配置依然有限就要把這個(gè)參數(shù)設(shè)為False,或者一直就是使用配置文件或者配置字典的方式來對(duì)logging進(jìn)行配置。
使用代碼logging的代碼來說明
使用baseConfig()函數(shù)對(duì) logging進(jìn)行 簡(jiǎn)單的 配置:
import logging logging.basicConfig(level=logging.INFO, format='%(levelname)s %(asctime)s [%(filename)s:%(lineno)d] %(message)s', datefmt='%Y.%m.%d. %H:%M:%S', # filename='parser_result.log', # filemode='w' ) log = logging.getLogger(__name__) if __name__ == '__main__': # 使用logger輸出日志信息 log.info('this is a log') log.debug("debug") log.info("info") log.warning("warning") log.error("error") log.critical("critiacl")
說明:
- 使用baseConfig()函數(shù),可選參數(shù)有filename,filemode,format,datefmt,level,stream
- 有filename是文件日志輸出,filemode是’w’的話,文件會(huì)被覆蓋之前生成的文件會(huì)被覆蓋。datafmt參數(shù)用于格式化日期的輸出
通過初始化logger,handler,formater來配置logging:
import logging # logging模塊由logger,handler,filter,fomatter四個(gè)部分組成 # 獲取一個(gè)logger對(duì)象 logger = logging.getLogger("haha") # 設(shè)置日志輸出等級(jí) logger.setLevel(logging.DEBUG) # 創(chuàng)建一個(gè)文件的handler f_handler = logging.FileHandler("xxx.log") f_handler.setLevel(logging.INFO) # 創(chuàng)建一個(gè)控制臺(tái)的handler c_handler = logging.StreamHandler() c_handler.setLevel(logging.WARNING) # 設(shè)置日志的輸出格式 fmt = logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s") # 給handler綁定一個(gè)fomatter類 f_handler.setFormatter(fmt) c_handler.setFormatter(fmt) # 綁定一個(gè)handler logger.addHandler(f_handler) logger.addHandler(c_handler) # 使用logger輸出日志信息 logger.debug("debug") logger.info("info") logger.warning("warning") logger.error("error") logger.critical("critiacl")
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一篇文章學(xué)會(huì)兩種將python打包成exe的方式
最近有部分小伙伴問我,python 寫的項(xiàng)目可不可以打包成exe程序,放到?jīng)]有python環(huán)境上的電腦中執(zhí)行? 答案當(dāng)然是可以的,下面這篇文章主要給大家介紹了如何通過一篇文章學(xué)會(huì)兩種將pyton打包成exe的方式,需要的朋友可以參考下2021-11-11Python編程實(shí)現(xiàn)粒子群算法(PSO)詳解
這篇文章主要介紹了Python編程實(shí)現(xiàn)粒子群算法(PSO)詳解,涉及粒子群算法的原理,過程,以及實(shí)現(xiàn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11transform python環(huán)境快速配置方法
經(jīng)常在數(shù)據(jù)開發(fā)中需要搞udf,最近發(fā)現(xiàn)transform更加方便易用,但是經(jīng)常會(huì)涉及到集群python版本不一、包不全或者部分機(jī)器上沒有安裝python。這篇文章主要介紹了transform python環(huán)境快速配置方法,需要的朋友可以參考下2018-09-09pip matplotlib報(bào)錯(cuò)equired packages can not be built解決
這篇文章主要介紹了pip matplotlib報(bào)錯(cuò)equired packages can not be built解決,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python使用當(dāng)前時(shí)間、隨機(jī)數(shù)產(chǎn)生一個(gè)唯一數(shù)字的方法
這篇文章主要介紹了Python使用當(dāng)前時(shí)間、隨機(jī)數(shù)產(chǎn)生一個(gè)唯一數(shù)字的方法,涉及Python時(shí)間與隨機(jī)數(shù)相關(guān)操作技巧,需要的朋友可以參考下2017-09-09python3 xpath和requests應(yīng)用詳解
這篇文章主要介紹了python3 xpath和requests應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03