python日志模塊logging案例詳解
日志模塊主要用于輸出運行日志,可以設(shè)置輸出日志的等級、日志保存路徑、日志文件回滾等
一、優(yōu)勢
可以通過設(shè)置不同的日志等級,在release版本中只輸出重要信息,而不必顯示大量的調(diào)試信息;
print將所有信息都輸出到標準輸出中,嚴重影響開發(fā)者從標準輸出中查看其它數(shù)據(jù);logging則可以由開發(fā)者決定將信息輸出到什么地方,以及怎么輸出。
二、等級(level)
開發(fā)應(yīng)用程序或部署開發(fā)環(huán)境時,可以使用DEBUG或INFO級別的日志獲取盡可能詳細的日志信息來進行開發(fā)或部署調(diào)試
應(yīng)用上線或部署生產(chǎn)環(huán)境時,應(yīng)該使用WARNING或ERROR或CRITICAL級別的日志來降低機器的I/O壓力和提高獲取錯誤日志信息的效率。日志級別的指定通常都是在應(yīng)用程序的配置文件中進行指定的。
分級
日志等級:DEBUG < INFO < WARNING < ERROR <CRITICAL
- DEBUG 最詳細的日志信息,典型應(yīng)用場景是 問題診斷
- INFO 信息詳細程度僅次于DEBUG,通常只記錄關(guān)鍵節(jié)點信息,用于確認一切都是按照我們預(yù)期的那樣進行工作
- WARNING 當某些不期望的事情發(fā)生時記錄的信息(如,磁盤可用空間較低),但是此時應(yīng)用程序還是正常運行的
- ERROR 由于一個更嚴重的問題導致某些功能不能正常運行時記錄的信息
- CRITICAL 當發(fā)生嚴重錯誤,導致應(yīng)用程序不能繼續(xù)運行時記錄的信息
三、使用方式
1.使用logging提供的模塊級別的函數(shù)
創(chuàng)建一條日志記錄
- 創(chuàng)建一條嚴重級別為DEBUG的日志記錄 logging.debug(msg, *args, **kwargs)
- 創(chuàng)建一條嚴重級別為INFO的日志記錄 logging.info(msg, *args, **kwargs)
- 創(chuàng)建一條嚴重級別為WARNING 的日志記錄 logging.warning(msg, *args, **kwargs)
- 創(chuàng)建一條嚴重級別為ERROR的日志記錄 logging.error(msg, *args, **kwargs)
- 創(chuàng)建一條嚴重級別為CRITICAL的日志記錄 logging.critical(msg, *args, **kwargs)
- 創(chuàng)建一條嚴重級別為level的日志記錄 logging.log(level, *args, **kwargs)
例: import logging logging.debug("debug_msg") logging.info("info_msg") logging.warning("warning_msg") logging.error("error_msg") logging.critical("critical_msg")
默認情況下logging模塊將日志打印到只顯示了大于等于WARNING級別的日志,這說明默認的日志級別設(shè)置為WARNING(日志級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG)
默認的日志格式為日志級別:Logger名稱:用戶輸出消息
2.對root logger進行一次性配置
logging.basicConfig(**kwargs)
logging.basicConfig(**kwargs)函數(shù) 用于指定“要記錄的日志級別”、“日志格式”、“日志輸出位置”、“日志文件的打開模式”等信息,其他幾個都是用于記錄各個級別日志的函數(shù)。
用默認日志格式(Formatter)為日志系統(tǒng)建立一個默認的流處理器(StreamHandler),設(shè)置基礎(chǔ)配置(如日志級別等)并加到root logger(根Logger)中)
logging.basicConfig()函數(shù)參數(shù)說明
- filename 指定日志輸出目標文件的文件名(可以寫文件名也可以寫文件的完整的絕對路徑,寫文件名日志放執(zhí)行文件目錄下,寫完整路徑按照完整路徑生成日志文件),指定該設(shè)置項后日志信心就不會被輸出到控制臺了
- filemode 指定日志文件的打開模式,默認為’a’。需要注意的是,該選項要在filename指定時才有效
- format 指定日志格式字符串,即指定日志輸出時所包含的字段信息以及它們的順序。logging模塊定義的格式字段下面會列出。
- datefmt 指定日期/時間格式。需要注意的是,該選項要在format中包含時間字段%(asctime)s時才有效
- level 指定日志器的日志級別
- stream 指定日志輸出目標stream,如sys.stdout、sys.stderr以及網(wǎng)絡(luò)stream。需要說明的是,stream和filename不能同時提供,否則會引發(fā) ValueError異常
- style Python 3.2中新添加的配置項。指定format格式字符串的風格,可取值為’%‘、’{‘和’$‘,默認為’%’
- handlers Python3.3中新添加的配置項。該選項如果被指定,它應(yīng)該是一個創(chuàng)建了多個Handler的可迭代對象,這些handler將會被添加到root logger。需要說明的是:filename、stream和handlers這三個配置項只能有一個存在,不能同時出現(xiàn)2個或3個,否則會引發(fā)ValueError異常。
例 import logging logging.basicConfig(level=logging.DEBUG, format="%(asctime)s %(name)s %(levelname)s %(message)s", datefmt = '%Y-%m-%d %H:%M:%S %a' ) #注意月份和天數(shù)不要搞亂了,這里的格式化符與time模塊相同 logging.debug("msg1") logging.info("msg2") logging.warning("msg3") logging.error("msg4") logging.critical("msg5") 結(jié)果: 2023-03-01 23:37:49 Wed root DEBUG msg1 2023-03-01 23:37:49 Wed root INFO msg2 2023-03-01 23:37:49 Wed root WARNING msg3 2023-03-01 23:37:49 Wed root ERROR msg4 2023-03-01 23:37:49 Wed root CRITICAL msg5
四、日志流處理流程(使用Logging日志系統(tǒng)的四大組件)
日志器(logger)是入口,真正干活兒的是處理器(handler),處理器(handler)還可以通過過濾器(filter)和格式器(formatter)對要輸出的日志內(nèi)容做過濾和格式化等處理操作。
1.日志器-Logger
提供了應(yīng)用程序可一直使用的接口
功能
1)向應(yīng)用程序代碼暴露幾個方法,使應(yīng)用程序可以在運行時記錄日志消息;
2)基于日志嚴重等級(默認的過濾設(shè)施)或filter對象來決定要對哪些日志進行后續(xù)處理;
3)將日志消息傳送給所有感興趣的日志handlers。
Logger對象最常用的方法分為兩類:配置方法 和 消息發(fā)送方法
配置方法
Logger.setLevel() 設(shè)置日志器將會處理的日志消息的最低嚴重級別
Logger.addHandler() 和 Logger.removeHandler() 為該logger對象添加 和 移除一個handler對象
Logger.addFilter() 和 Logger.removeFilter() 為該logger對象添加 和 移除一個filter對象
創(chuàng)建日志記錄
創(chuàng)建一個與它們的方法名對應(yīng)等級的日志記錄
Logger.debug(), Logger.info(), Logger.warning(), Logger.error(), Logger.critical()
創(chuàng)建一個類似于Logger.error()的日志消息
Logger.exception()
需要獲取一個明確的日志level參數(shù)來創(chuàng)建一個日志記錄
Logger.log()
2.處理器 -Handler
將logger創(chuàng)建的日志記錄分發(fā)到handler指定的位置(文件、網(wǎng)絡(luò)、郵件等)。
子類
- logging.StreamHandler 將日志消息發(fā)送到輸出到Stream,如std.out, std.err或任何file-like對象。
- logging.FileHandler 將日志消息發(fā)送到磁盤文件,默認情況下文件大小會無限增長
- logging.handlers.RotatingFileHandler 將日志消息發(fā)送到磁盤文件,并支持日志文件按大小切割
- logging.hanlders.TimedRotatingFileHandler 將日志消息發(fā)送到磁盤文件,并支持日志文件按時間切割
- logging.handlers.HTTPHandler 將日志消息以GET或POST的方式發(fā)送給一個HTTP服務(wù)器
- logging.handlers.SMTPHandler 將日志消息發(fā)送給一個指定的email地址
- logging.NullHandler 該Handler實例會忽略error messages,通常被想使用logging的library開發(fā)者使用來避免’No handlers could be found for logger XXX’信息的出現(xiàn)。
說明
Handler.setLevel(lel):指定被處理的信息級別,低于lel級別的信息將被忽略
Handler.setFormatter():給這個handler選擇一個格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或刪除一個filter對象
3.過濾器 -Filter
提供了更細粒度的控制工具來決定輸出哪條日志記錄,丟棄哪條日志記錄
Filter是一個過濾器基類,它只允許某個logger層級下的日志事件通過過濾
定義
class logging.Filter(name=‘’)
filter(record)
4.格式器 Formatter
配置日志信息的最終順序、結(jié)構(gòu)和內(nèi)容。
Formatter類的構(gòu)造方法
logging.Formatter.__init__(fmt=None, datefmt=None, style='%') 參數(shù) fmt:指定消息格式化字符串,如果不指定該參數(shù)則默認使用message的原始值 datefmt:指定日期格式字符串,如果不指定該參數(shù)則默認使用"%Y-%m-%d %H:%M:%S" style:Python 3.2新增的參數(shù),可取值為 '%', '{'和 '$',如果不指定該參數(shù)則默認使用'%'
5.日志流處理簡要流
- 1、創(chuàng)建一個logger
- 2、設(shè)置下logger的日志的等級
- 3、創(chuàng)建合適的Handler(FileHandler要有路徑)
- 4、設(shè)置下每個Handler的日志等級
- 5、創(chuàng)建下日志的格式
- 6、向Handler中添加上面創(chuàng)建的格式
- 7、將上面創(chuàng)建的Handler添加到logger中
- 8、打印輸出logger.debug\logger.info\logger.warning\logger.error\logger.critical
6.實例
import logging # 創(chuàng)建日志器對象 logger = logging.getLogger(__name__) # 設(shè)置logger可輸出日志級別范圍 logger.setLevel(logging.DEBUG) # 添加控制臺handler,用于輸出日志到控制臺 console_handler = logging.StreamHandler() # 添加日志文件handler,用于輸出日志到文件中 file_handler = logging.FileHandler(filename='log.log', encoding='UTF-8') # 將handler添加到日志器中 logger.addHandler(console_handler) logger.addHandler(file_handler) # 設(shè)置格式并賦予handler formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) file_handler.setFormatter(formatter) # 輸出不同級別日志 logger.debug("============【開始測試】====================") logger.info("============【開始測試】====================") logger.warning("============【開始測試】====================") logger.critical("============【開始測試】====================") logger.error("============【開始測試】====================") 結(jié)果為: 2023-03-18 02:32:46,316 - __main__ - DEBUG - ============【開始測試】==================== 2023-03-18 02:32:46,316 - __main__ - INFO - ============【開始測試】==================== 2023-03-18 02:32:46,316 - __main__ - WARNING - ============【開始測試】==================== 2023-03-18 02:32:46,316 - __main__ - CRITICAL - ============【開始測試】==================== 2023-03-18 02:32:46,316 - __main__ - ERROR - ============【開始測試】====================
到此這篇關(guān)于python日志模塊logging的文章就介紹到這了,更多相關(guān)python日志模塊logging內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解pandas刪除缺失數(shù)據(jù)(pd.dropna()方法)
這篇文章主要介紹了pandas刪除缺失數(shù)據(jù)(pd.dropna()方法),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06pandas按若干個列的組合條件篩選數(shù)據(jù)的方法
下面小編就為大家分享一篇pandas按若干個列的組合條件篩選數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python?PaddleNLP開源實現(xiàn)快遞單信息抽取
這篇文章主要為大家介紹了Python?PaddleNLP開源項目實現(xiàn)對快遞單信息抽取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06django 實現(xiàn)celery動態(tài)設(shè)置周期任務(wù)執(zhí)行時間
今天小編就為大家分享一篇django 實現(xiàn)celery動態(tài)設(shè)置周期任務(wù)執(zhí)行時間,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計算實例
今天小編就為大家分享一篇Python 余弦相似度與皮爾遜相關(guān)系數(shù) 計算實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12