python基礎 Logging模組

2022-05-05 04:18:10 字數 3194 閱讀 4451

log(日誌) 基礎知識概覽

日誌是什麼?

日誌(logging)是一種可追蹤(track)某些軟體執行時所發生事件的方法。軟體開發人員 可在他們的**中呼叫日誌記錄相關的方法來表明發生了某些事件。

通過乙個描述性的訊息來描述這個事件,該訊息能夠可選地包含可變資料。而 事件有重要性的概念,重要性被稱為 嚴重性級別(level)。

日誌的作用?

通過對log的分析,可以方便使用者了解系統或軟體、應用的運**況; 若應用的log足夠豐富,可分析出以往使用者的操作行為、型別喜好、地域分析、或其他更多

資訊,據此來改進業務、提高商業利益; 若乙個應用的log分了多個級別,則可輕鬆地分析得到應用的健康狀況,及時發現問題並快速定位、解決問題,補救損失。

通過記錄和分析日誌可以了解乙個系統 或軟體程式運**況是否正常,也可以在應用程式出現故障時快速定位問題。例如:開發者可通過在控制台上輸出的各種

日誌進行程式除錯;運維人員在接收到報警或各種問題反饋後,進行問題排查時通常都會先看各種日誌,大部分問題都可在日誌中找到答案。日誌的作用可總結為3點:

1. 程式除錯

2. 了解軟體程式運**況,是否正常

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

logging模組提供logger、handler、filter、formatter。

logger:記錄器

1. 應用程式**能直接呼叫日誌介面。

2. logger最常用的操作有兩類:配置和傳送日誌訊息。

3. 初始化 logger = logging.getlogger("endlesscode"),獲取logger物件,getlogger()方法後面最好加上所要日誌記錄的模組名字,配置檔案和列印日誌格式

中的%(name)s 對應的是這裡的模組名字,如果不指定name則返回root物件。

日誌級別設定

4. logger.setlevel(logging.debug),logging中有notset < debug < info < warning < error < critical這幾種級別,日誌會記錄設定級別以上的日誌

5. 多次使用相同的name呼叫getlogger方法返回同乙個looger物件;

handler:處理器

將(記錄器產生的)日誌記錄(log record)傳送至合適的目的地(destination),比如檔案,socket等。

handler常用的是streamhandler和filehandler,可以簡單理解為乙個是console和檔案日誌,乙個列印在除錯視窗上,乙個記錄在乙個檔案上

乙個logger物件可以通過addhandler方法新增0到多個handler,每個handler又可以定義不同日誌級別,以實現日誌分級過濾顯示。

filter:

過濾器,提供了更好的粒度控制,它可以決定輸出哪些日誌記錄。

formatter:

格式化器,指明了最終輸出中日誌記錄的布局。

指定日誌記錄輸出的具體格式。

formatter的構造方法需要兩個引數:訊息的格式字串和日期字串,這兩個引數都是可選的。

喜歡用這樣的格式 '[%(asctime)s] [%(levelname)s] %(message)s', '%y-%m-%d %h:%m:%s'

logging模組使用過程

1. 第一次匯入logging模組或使用reload函式重新匯入logging模組,logging模組中的**將被執行,這個過程中將產生logging日誌系統的預設配置。

2. 自定義配置(可選)。logging標準模組支援三種配置方式: dictconfig,fileconfig,listen。其中,dictconfig是通過乙個字典進行配置logger,handler,filter,formatter;

fileconfig則是通過乙個檔案進行配置;而listen則監聽乙個網路埠,通過接收網路資料來進行配置。當然,除了以上集體化配置外,也可以直接呼叫logger,handler等對

象中的方法在**中來顯式配置。

3. 使用logging模組的全域性作用域中的getlogger函式來得到乙個logger物件例項(其引數即是乙個字串,表示logger物件例項的名字,即通過該名字來得到相應的logger物件例項)。

4. 使用logger物件中的debug,info,error,warn,critical等方法記錄日誌資訊。

logging模組處理流程

1. 判斷日誌的等級是否大於logger物件的等級,如果大於,則往下執行,否則,流程結束。

2. 產生日誌。第一步,判斷是否有異常,如果有,則新增異常資訊。第二步,處理日誌記錄方法(如debug,info等)中的佔位符,即一般的字串格式化處理。

3. 使用註冊到logger物件中的filters進行過濾。如果有多個過濾器,則依次過濾;只要有乙個過濾器返回假,則過濾結束,且該日誌資訊將丟棄,不再處理,

而處理流程也至此結束。否則,處理流程往下執行。

4.  在當前logger物件中查詢handlers,如果找不到任何handler,則往上到該logger物件的父logger中查詢;如果找到乙個或多個handler,則依次用handler

來處理日誌資訊。但在每個handler處理日誌資訊過程中,會首先判斷日誌資訊的等級是否大於該handler的等級,如果大於,則往下執行(由logger物件進入

handler物件中),否則,處理流程結束。

5. 執行handler物件中的filter方法,該方法會依次執行註冊到該handler物件中的filter。如果有乙個filter判斷該日誌資訊為假,則此後的所有filter都不再執行,

而直接將該日誌資訊丟棄,處理流程結束。

6.  使用formatter類格式化最終的輸出結果。 注:formatter同上述第2步的字串格式化不同,它會新增額外的資訊,比如日誌產生的時間,產生日誌的源**

所在的原始檔的路徑等等。真正地輸出日誌資訊(到網路,檔案,終端,郵件等)。至於輸出到哪個目的地,由handler的種類來決定。

Python基礎 logging模組

先是基礎配置 import logging logging.basicconfig filename level logging.debug 配置好了之後產生的一切日誌都會記錄在filename.log當中,具體用法舉例 logging.info logging some infomation lo...

python基礎 logging模組

loggging日誌 python的logging模組提供了通用的日誌系統.這個模組提供不同的日誌級別,並可以採用不同的方式記錄日誌 注意 python檔案的命名是有講究的,不要把檔名命名的和模組名字一樣,這樣會一直報錯,比如你這裡如果命名為logging.py就會一直報錯 logging.basi...

python基礎 日誌logging模組

在一般情況下,日誌作用相當於print的作用,用顯示程式執行當中的一些資訊,如當前迭代次數等,但是有時候我們會讓程式在後台執行,此時print函式將失去作用,我們需要將程式執行的資訊存放在檔案中,最長見的是linux中nohup.out檔案,事後我們可以從日誌檔案中檢視程式執行的一些資訊 從低到高為...