一、日誌概念
日誌是一種可以追蹤某些軟體執行時所發生事件的方法。 軟體開發人員可以向他們的**中
呼叫日誌記錄相關的方法來表明發生了某些事情。 乙個事件可以用乙個可包含可選變數資料
的訊息來描述。 此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性級別(level)。
python自身也提供了乙個用於記錄日誌的標準庫模組--logging。 logging模組定義的函式和
類為應用程式和庫的開發實現了乙個靈活的事件日誌系統,由標準庫模組提供日誌記錄api,
關鍵好處是所有python模組都可以使用這個日誌記錄功能。 所以,你的應用日誌可以將你自
己的日誌資訊與來自第三方模組的資訊整合起來。
總之,日誌的作用就是:
除錯軟體程式
了解軟體程式運**況,確定軟體執行是否執行正常
軟體程式故障分析與定位
二、logging模組
1、logging日誌級別
日誌級別
數值使用範圍
critical
特別糟糕的事情,如記憶體耗盡,磁碟空間為空,一般很少使用
error
發生錯誤時,如io操作失敗或者連線問題
warning
發生很重要的事情,但並不是錯誤,是警告資訊
info
處理請求或者狀態變化等日常事務
debug
除錯過程中使用debug等級,如演算法中每個迴圈的中間狀態
notset
很少使用
內建等級中,級別最低的是debug,級別最高的是critical。例如setlevel(logging.info),此時函式引數為info,那麼該logger將只會處理info、warning、error和critical級別的日誌,而debug級別的訊息將會被忽略/丟棄。
2、logging日誌系統的四大元件
在實際操作中,一般是先建立日誌記錄器(logging.getlogger),然後再設定日誌級別(logger.setlevel),接著再建立日誌檔案,也就是日誌儲存的地方(logging.filehandler),然後再設定日誌格式(logging.formatter),最後再將日誌處理程式記錄到記錄器(addhandler)
元件名稱
類名功能簡介
日誌器logger
處理器handler
決定將日誌記錄分配至正確的目的地
過濾器filter
對日誌資訊進行過濾,提供更細粒度的日誌來判斷輸出哪條日誌記錄
格式器formatter
決定日誌記錄的最終輸出格式
日誌器(loggers)是入口,真正工作的是處理器(handler),處理器(handler)還可以通過過濾器(filter)和格式器(formatter)對要輸出的日誌內容做過濾和格式化等處理操作。
logger類:配置方法和訊息傳送方法
配置方法
方法功能描述
logger.setlevel()
設定記錄器將會處理的最低嚴重級別的日誌
logger.addhandler()
為logger物件新增乙個handler物件
logger.removehandler()
為logger物件移除乙個handler物件
logger.addfilter()
為logger物件新增乙個filter物件
logger.removefilter()
為logger物件移除乙個filter物件
訊息傳送方法
方法功能描述
logger.debug(),logger.info(),logger.warning(),logger.error(),logger.critical(),
建立乙個與其方法名對應等級的日誌記錄
logger.exception()
建立乙個類似與logger.error()的日誌記錄
logger.log()
需要獲取乙個明確的日誌level引數來建立乙個日誌記錄
handler類:常用配置方法
方法功能描述
handler.setlevel()
設定handler將會處理的最低嚴重級別的日誌
handler.setformatter()
為handler設定乙個格式器物件
handler.addfilter()
為handler新增乙個過濾器物件
handler.removefilter()
為handler移除乙個過濾器物件
需要說明的是,應用程式**不應該直接例項化和使用handler例項。因為handler是乙個基類,它只定義了素有handlers都應該有的介面,同時提供了一些子類可以直接使用或覆蓋的預設行為。下面是一些常用的handler
handler
功能描述
logging.filehandler
將日誌訊息傳送到磁碟檔案,預設情況下檔案大小會無限
logging.streamhandler
將訊息傳送到輸出到stream,如std.out,std.err任 file-like物件,也就是顯示在除錯終端
logging.handlers.rotating.filehandler
將日誌訊息傳送到磁碟檔案,並支援日誌檔案按大小切割
logging.handlers.timedrotatingfilehandler
將日誌訊息傳送到磁碟檔案,並支援日誌檔案按時間切割
將日誌訊息以get或post的方式傳送給乙個http伺服器
logging.handlers.smtphandler
將日誌訊息傳送給乙個指定的email位址
logging.handlers.nullhandler
該handler例項會忽略error messages,通常被想使用logging的library開發者使用來避免'no handlers could be found for logger ***'資訊的出現.
filter類:可以被handler和logger用來做比level更細粒度的、更複雜的過濾功能。
filter是乙個過濾器基類,它只允許某個logger層級下的日誌事件通過過濾。
formater類:用於配置日誌資訊的最終順序、結構和內容
formater物件與logging.handler基類不同的是,應用**可以直接例項化formatter類。另外,如果你的應用程式需要一些特殊的處理行為,也可以實現乙個formatter的子類來完成。
格式說明
%(levelno)s
列印日誌級別的數值
%(levelname)s
列印日誌級別的名稱
%(pathname)s
列印當前執行程式的路徑,其實就是sys.ar**[0]
%(filename)s
列印當前執行程式名
%(funcname)s
列印日誌的當前函式
%(lineno)d
列印日誌的當前行號
%(asctime)s
列印日誌的時間
%(thread)d
列印執行緒id
%(threadname)s
列印執行緒名稱
%(process)d
列印程序id
%(message)s
列印日誌資訊
3、示例
import logging
#建立日誌級別
logger = logging.getlogger(__name__)
logger.setlevel(logging.info)
#建立日誌檔案
handler_info = logging.filehandler('info_log.txt')
handler_info.setlevel(logging.info)
handler_warn = logging.filehandler('warning_log.txt')
handler_warn.setlevel(logging.warning)
#定義日誌格式
formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_info.setformatter(formatter)
handler_warn.setformatter(formatter)
#新增到日誌記錄器中
logger.addhandler(handler_info)
logger.addhandler(handler_warn)
logger.info('information')
logger.warning('warning')
開啟'warning_log.txt'檔案,輸出:
2019-08-23 18:05:25,162 - __main__ - warning - warning
開啟『info_log.txt'檔案,輸出:
2019-08-23 18:05:25,161 - __main__ - info - information
2019-08-23 18:05:25,162 - __main__ - warning - warning
python日誌等級 python 日誌輸出級別
import logging logging.basicconfig level logging.debug,format asctime s filename s line lineno d levelname s message s datefmt a,d b y h m s filename ...
Python3日誌記錄模組logging
日誌等級 等級描述 debug 最詳細的日誌資訊,典型應用場景是問題診斷 info 資訊詳細程度僅次於debug,通常只記錄關鍵節點資訊,用於確認一切都是按照我們預期的那樣進行工作 warning 當某些不期望的事情發生時記錄的資訊 如,磁碟可用空間較低 但是此時應用程式還是正常執行的 error ...
Python日誌列印
簡單示例 import sys import ctypes import logging import logging.handlers reload sys sys.setdefaultencoding utf 8 log file test log logging.basicconfig fil...