1. 程式人生 > 程式設計 >Python中關於logging模組的學習筆記

Python中關於logging模組的學習筆記

python的logging模組

python提供了一個日誌處理的模組,那就是logging。

匯入logging模組使用以下命令:

import logging

logging模組的用法:

1.簡單的將日誌列印到螢幕上

import logging
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

會在螢幕上顯示出以下內容:

WARNING:root:This is warning message

ERROR:root:This is error message

CRITICAL:root:This is critical message

預設情況下python的logging模組將日誌列印到了標準輸出中,也就是螢幕上,且只顯示了大於等於WARNING級別的日誌.

這說明預設的日誌級別設定為WARNING(日誌級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG)

預設直接輸出的日誌格式為日誌級別:Logger名稱:使用者:輸出訊息。

2.現在修改日誌的預設輸出級別為debug,重新設定輸出時間的格式,

import logging
logging.basicConfig(level=logging.DEBUG,format="%(asctime)s %(levelname)s %(message)s",datefmt="%Y-%m-%d %H:%M:%S")
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

會在螢幕上顯示以下資訊;

2017-07-02 10:41:18 DEBUG This is debug message

2017-07-02 10:41:18 INFO This is info message

2017-07-02 10:41:18 WARNING This is warning message

2017-07-02 10:41:18 ERROR This is error message

2017-07-02 10:41:18 CRITICAL This is critical message

3.現在想把程式產生的日誌寫入檔案當中,可以這樣設定:

import logging
logging.basicConfig(level=logging.DEBUG,format="%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s",datefmt="%Y-%m-%d %H:%M:%S",filename="log.txt",filemode="w")
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

執行程式,會在指令碼目錄下生成一個名為log.txt的檔案。

log.txt檔案的內容如下:

2017-07-02 10:49:13 logging_modules.py[line:211] DEBUG This is debug message

2017-07-02 10:49:13 logging_modules.py[line:212] INFO This is info message

2017-07-02 10:49:13 logging_modules.py[line:213] WARNING This is warning message

2017-07-02 10:49:13 logging_modules.py[line:214] ERROR This is error message

2017-07-02 10:49:13 logging_modules.py[line:215] CRITICAL This is critical message

在這裡設定日誌檔案的輸出使用的是basicConfig這個方法:

logging.basicConfig函式各引數:
filename: 指定輸出日誌的檔名
filemode: 和file函式意義相同,指定日誌檔案的開啟模式,寫入模式用'w',追加模式使用'a'
format: 指定輸出的內容的格式,其中可以使用的引數有:
   %(levelno)s: 指定輸出日誌的級別的數值
   %(levelname)s: 指定輸出日誌的級別的名稱
   %(pathname)s: 指定當前執行程式的路徑,其實就是sys.argv[0]
   %(filename)s: 指定儲存日誌檔案的名字
   %(funcName)s: 列印日誌的當前函式
   %(lineno)d: 列印日誌的當前行號
   %(asctime)s: 列印日誌的時間
   %(thread)d: 列印執行緒ID
   %(threadName)s: 列印執行緒名稱
   %(process)d: 列印程序ID
   %(message)s: 列印日誌資訊
datefmt: 指定時間格式,同time.strftime()
level: 設定日誌級別,預設為logging.WARNING,這裡設定為logging.DEBUG

4.既想現在就看到輸出的日誌,又想把程式執行的日誌儲存在檔案裡,方便以後檢視,可以這樣設定:

import logging
logger=logging.getLogger()
#建立一個file_handle變數,用於把日誌寫入到檔案
file_handle=logging.FileHandler("log1.txt")
#建立一個stream_handle變數,用於輸出日誌到螢幕上
stream_handle=logging.StreamHandler()
#設定輸出日誌的級別為debug級別
logger.setLevel(logging.DEBUG)
#設定輸出日誌的格式
fmt=logging.Formatter("%(asctime)s-%(levelname)s-%(message)s")
#為寫入檔案的日誌新增已設定的格式
file_handle.setFormatter(fmt)
#為輸出到螢幕的日誌新增已設定的格式 
stream_handle.setFormatter(fmt)
logger.addHandler(file_handle)
logger.addHandler(stream_handle)
#設定輸出日誌的資訊
logging.debug("This is debug message")
logging.info("This is info message")
logging.warning("This is warning message")
logging.error("This is error message")
logging.critical("This is critical message")

執行程式後,會生成一個名為log1.txt的檔案,檔案的內容和螢幕上顯示的內容都是:

2017-07-02 11:04:53,622-DEBUG-This is debug message

2017-07-02 11:04:53,623-INFO-This is info message

2017-07-02 11:04:53,623-WARNING-This is warning message

2017-07-02 11:04:53,623-ERROR-This is error message

2017-07-02 11:04:53,624-CRITICAL-This is critical message

在這裡,還可以新增以下選項用來指定把要寫入檔案的日誌設定為debug級別,而輸出到螢幕上的日誌還是warning級別

fh.setLevel(logging.Debug)

內容擴充套件:

日誌的作用

通過log的分析,可以方便使用者瞭解系統或軟體、應用的執行情況;如果你的應用log足夠豐富,也可以分析以往使用者的操作行為、型別喜好、地域分佈或其他更多資訊;如果一個應用的log同時也分了多個級別,那麼可以很輕易地分析得到該應用的健康狀況,及時發現問題並快速定位、解決問題,補救損失。

簡單來講就是,我們通過記錄和分析日誌可以瞭解一個系統或軟體程式執行情況是否正常,也可以在應用程式出現故障時快速定位問題。比如,做運維的同學,在接收到報警或各種問題反饋後,進行問題排查時通常都會先去看各種日誌,大部分問題都可以在日誌中找到答案。再比如,做開發的同學,可以通過IDE控制檯上輸出的各種日誌進行程式除錯。對於運維老司機或者有經驗的開發人員,可以快速的通過日誌定位到問題的根源。可見,日誌的重要性不可小覷。日誌的作用可以簡單總結為以下3點:

程式除錯

瞭解軟體程式執行情況,是否正常

軟體程式執行故障分析與問題定位

如果應用的日誌資訊足夠詳細和豐富,還可以用來做使用者行為分析,如:分析使用者的操作行為、型別洗好、地域分佈以及其它更多的資訊,由此可以實現改進業務、提高商業利益。

到此這篇關於Python中關於logging模組的學習筆記的文章就介紹到這了,更多相關Python之logging模組相關介紹內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!