Python之日誌處理-logging模塊使用教程
Logging模塊
日誌記錄是跟蹤某些軟體運行時發生的事件的一種方法。該軟體的開發人員將日誌調用添加到代碼中,以表明發生了某些事件。事件由描述性消息描述,該消息可選地包含變數數據(例如,對於每個事件的發生可能不同的數據)。事件也具有開發人員將其歸因於事件的重要性;重要性也可以稱為級別或嚴重性。
日誌記錄基本方法
診斷問題。
確認代碼是否按預期工作。
表明一些意想不到的事情發生了,或說明一些問題在不久的將來(例如低磁碟空間)。
由於一個更嚴重的問題,程序沒能執行一些功能。
一個嚴重的錯誤,這表明程序本身可能無法繼續運行。
舉個栗子
一個簡單的栗子
執行輸出:
可以看出logging默認Log級別為。
將日誌記錄到文件
執行後,腳本當前目錄會多一個文件。
進階
logging庫採用了模塊化的方式,提供了4種類別的組件,分別為: and 。
loggers 提供應用程序代碼直接使用的介面。
handlers 用於將日誌記錄發送到指定的目的位置。
filters 提供更細粒度的日誌過濾功能,用於決定哪些日誌記錄將會被輸出(其它的日誌記錄將會被忽略)。
formatters 用於控制日誌信息的最終輸出格式。
loggers
loggers對象有三個功能,首先是向公開方法,方便程序運行時記錄日誌。其次是根據日誌級別來篩選日誌,最後,將日誌傳給符合的handlers。
logger.setLevel() 設置日誌級的級別。
logger.addHandler() 從loggers對象中添加handlers對象。
logger.removeHandler() 從loggers對象中刪除handlers對象。
logger.addFilter() 從loggers對象中添加filters對象。
logger.removeFilter() 從loggers對象中刪除filters對象。
handlers
handler 負責將特定程度的日誌級別發送消息到一個特定的位置。
handler.setLevel() 設置日誌級的級別,為什麼會有兩個設置日誌級別?logger設置的級別是確定哪種級別的消息將傳遞給handler,handler設置的級別是確定發送哪種級別的消息。
handler.setFormatter() 設置handler的formatter對象。
addFilter() 將Filter對象添加到handler對象上。
removerFilter() 從handler對象上移除Filter對象。
formatters
格式化程序對象配置日誌消息的最終順序、結構和內容。
filters
Filter可以被Handler和Logger用來做比level更細粒度的、更複雜的過濾功能。Filter是一個過濾器基類,它只允許某個logger層級下的日誌事件通過過濾。
示例代碼
執行後輸出
使用配置的方式:
下面是log.conf文件
py文件
執行後和上面的輸出的結果一樣。
配置文件的方式相比代碼的方式有以下的優點:
代碼看上去更加整潔,便於閱讀
配置的方式以後修改只需改配置文件,不需要更改代碼
實例
現在有以下幾個日誌記錄的需求:
要求將所有級別的所有日誌都寫入磁碟文件中。
all.log文件中記錄所有的日誌信息,日誌格式為:日期和時間 - 日誌級別 - 日誌信息。
error.log文件中單獨記錄error及以上級別的日誌信息,日誌格式為:日期和時間 - 日誌級別 - 文件名[:行號] - 日誌信息。
要求all.log在每天凌晨進行日誌切割。
all.log
error.log
End
如果你覺得還不錯,那就點個贊吧
聽說喜歡留言、分享的人
運氣都不會差
python筆記俠


※C#使用Python腳本應用-傳參和獲取返回值
※Python程序如何打包成exe
TAG:Python |