1、logger類用法
logger
類:logger
用於提供日誌介面,常用於配置和傳送日誌訊息。
我們一般使用logging.getLogger(name)
方法來獲得一個logger
物件。
其中,可選引數name
指定日誌器名稱,預設為“root”。
常用方法包括:
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.log()
:獲取一個日誌level
引數,來建立一個日誌記錄。
示例:
"""
logging模組是Python的內建模組,不需要安裝。
"""
# 匯入logging模組
import logging
# 建立一個日誌器,就是一個logger物件
logger = logging.getLogger('logger')
# 輸出日誌資訊
logger.debug('輸出debug級別的日誌')
logger.info('輸出info級別的日誌')
logger.warning('輸出warning級別的日誌')
logger.error('輸出error級別的日誌')
logger.critical('輸出critical級別的日誌')
"""
# 右鍵執行程式碼
# 結果如下:
輸出warning級別的日誌
輸出error級別的日誌
輸出critical級別的日誌
"""
總結:
預設情況下Python的logging
模組將日誌列印到了標準輸出中(控制檯),且只顯示了大於等於WARNING級別的日誌,這說明預設的日誌級別設定為WARNING。
2、handler類用法
handler
類:handler
物件用於將指定的日誌資訊傳送到指定的位置。
一個logger
物件可以新增多個handler
,每個handler
又可以定義不同日誌級別,以實現日誌分級過濾顯示。
也就是說通過handler
我們可以將日誌同時輸出到多個位置。
常用的方法包括:
handler.setLevel()
:設定handler
處理的日誌資訊最低階別。handler.setFormatter()
:為handler
設定一個格式器物件。handler.addFilter()
:為handler
新增一個過濾器物件。handler.removeFilter()
:為handler
刪除一個過濾器物件。logging.StreamHandler()
:將日誌資訊傳送到Stream
。logging.FileHandler()
:將日誌訊息傳送到磁碟檔案。
示例:把上面的示例,實現DEBUG級別日誌的輸出。
"""
logging模組是Python的內建模組,不需要安裝。
"""
# 匯入logging模組
import logging
# 建立一個日誌器,就是一個logger物件
logger = logging.getLogger('logger')
# 1.設定logger日誌級別
logger.setLevel(logging.DEBUG)
# 2.建立一個輸出的處理器,讓它輸入到控制檯
sh = logging.StreamHandler()
# 3.把輸出處理器新增到日誌器中
logger.addHandler(sh)
# 輸出日誌資訊
logger.debug('輸出debug級別的日誌')
logger.info('輸出info級別的日誌')
logger.warning('輸出warning級別的日誌')
logger.error('輸出error級別的日誌')
logger.critical('輸出critical級別的日誌')
"""
# 右鍵執行程式碼
# 結果如下:
輸出debug級別的日誌
輸出info級別的日誌
輸出warning級別的日誌
輸出error級別的日誌
輸出critical級別的日誌
"""
說明:
當我們設定好logger
日誌級別後,執行程式碼,發現還是和上面一樣,只輸出了warning
級別日誌。
這個時候我們是改變了logger
預設設定,就需要建立一個日誌處理器Handler
,來處理輸出這個自定義logger
物件的日誌輸出。
3、formatter類用法
formatter
類:formatter
物件用來輸出格式化字串,也叫做格式器。
構造方法如下:
logging.Formatter.__init__(fmt=None, datefmt=None)
其中:
fmt
:指定資訊(日誌)的格式化字串,如不設定則使用資訊的原始字串。
datefmt
:指定日期的格式化字串,如不設定則使用預設格式"%Y-%m-%d %H:%M:%S"
logging
模組中定義好的可以用於format
格式字串說明:
欄位/屬性名稱 | 使用格式 | 描述 |
---|---|---|
asctime |
%(asctime)s |
將日誌的時間構造成可讀的形式,預設情況下是‘2016-02-08 12:00:00,123’ 精確到毫秒。 |
name |
%(name)s |
所使用的日誌器名稱,預設是root ,因為預設使用的是 rootLogger 。 |
filename |
%(filename)s |
呼叫日誌輸出函式的模組的檔名; pathname 的檔名部分,包含檔案字尾。 |
funcName |
%(funcName)s |
由哪個function 發出的log , 呼叫日誌輸出函式的函式名。 |
levelname |
%(levelname)s |
日誌的最終等級(被filter 修改後的)。 |
message |
%(message)s |
日誌資訊, 日誌記錄的文字內容。 |
lineno |
%(lineno)d |
當前日誌的行號, 呼叫日誌輸出函式的語句所在的程式碼行。 |
levelno |
%(levelno)s |
該日誌記錄的數字形式的日誌級別(10, 20, 30, 40, 50)。 |
pathname |
%(pathname)s |
完整路徑 ,呼叫日誌輸出函式的模組的完整路徑名,可能沒有。 |
process |
%(process)s |
當前程式, 程式ID。可能沒有。 |
processName |
%(processName)s |
程式名稱,Python 3.1新增。 |
thread |
%(thread)s |
當前執行緒, 執行緒ID。可能沒有。 |
threadName |
%(thread)s |
執行緒名稱。 |
module |
%(module)s |
呼叫日誌輸出函式的模組名,filename 的名稱部分,不包含字尾即不包含檔案字尾的檔名。 |
created |
%(created)f |
當前時間,用UNIX標準的表示時間的浮點數表示; 日誌事件發生的時間--時間戳,就是當時呼叫time.time() 函式返回的值。 |
relativeCreated |
%(relativeCreated)d |
輸出日誌資訊時的,自Logger 建立以 來的毫秒數; 日誌事件發生的時間相對於logging 模組載入時間的相對毫秒數。 |
msecs |
%(msecs)d |
日誌事件發生事件的毫秒部分。logging.basicConfig() 中用了引數datefmt ,將會去掉asctime 中產生的毫秒部分,可以用這個加上。 |
示例:
"""
logging模組是Python的內建模組,不需要安裝。
步驟:
1,定義格式器
2,把格式器輸入處理器中
"""
# 匯入logging模組
import logging
# 建立一個日誌器,就是一個logger物件
logger = logging.getLogger('logger')
# 設定logger輸入級別
logger.setLevel(logging.DEBUG)
# 1.建立日誌格式器
formator = logging.Formatter(fmt="%(asctime)s [ %(filename)s ] %(lineno)d行 | [ %(levelname)s ] | [%(message)s]",
datefmt="%Y/%m/%d/%X")
# 建立一個輸出的處理器,讓它輸入到控制檯
sh = logging.StreamHandler()
# 把輸出處理器新增到日誌器中
logger.addHandler(sh)
# 2.給處理器新增格式器
sh.setFormatter(formator)
# 輸出日誌資訊
logger.debug('輸出debug級別的日誌')
logger.info('輸出info級別的日誌')
logger.warning('輸出warning級別的日誌')
logger.error('輸出error級別的日誌')
logger.critical('輸出critical級別的日誌')
"""
# 右鍵執行程式碼
# 結果如下:
2021/01/15/03:15:44 [ demo_log2.py ] 27行 | [ DEBUG ] | [輸出debug級別的日誌]
2021/01/15/03:15:44 [ demo_log2.py ] 28行 | [ INFO ] | [輸出info級別的日誌]
2021/01/15/03:15:44 [ demo_log2.py ] 29行 | [ WARNING ] | [輸出warning級別的日誌]
2021/01/15/03:15:44 [ demo_log2.py ] 30行 | [ ERROR ] | [輸出error級別的日誌]
2021/01/15/03:15:44 [ demo_log2.py ] 31行 | [ CRITICAL ] | [輸出critical級別的日誌]
"""
4、filter類用法
filter類
:filter
是一個過濾器,可以實現比logger
和handle
更細緻靈活的過濾功能。
設定只輸出符合過濾條件的日誌記錄,提供給Logger
類和Handler
類使用。
Logger
類預設過濾具有相同字首的所有日誌記錄。
Logger
只有在處理日誌記錄時即時檢查Filter
,所以繼承Logger
不會檢查Filter
。
Handler
首先註冊Filter
,然後在處理後續日誌記錄時檢查。
首先定義logging.Filter
的擴充套件類,並在其中實現def filter(self, record)
方法。然後建立定製Filter
類的例項,並通過addFilter()
方法附加到Logger
和Handler
。