說說如何在 Python 中使用日誌

2022-08-20 01:57:10 字數 2716 閱讀 6130

通過日誌,我們可以理解程式中發生的事件,以及事件發生的順序。通過 python 的 logging 模組可以建立自定義的日誌記錄。這些日誌記錄可以包含呼叫時間以及當時變數的值;而且如果日誌記錄有缺失,說明有部分**被跳過。

al sweigart 寫過這樣乙個示例,很好地詮釋了使用日誌來排查程式問題的實踐方法。他舉了乙個計算階乘的示例:

import logging

logging.basicconfig(level=logging.debug, format='%(asctime)s - %(levelname)s - %(message)s')

logging.debug('start of program')

def factorial(n):

logging.debug('start of factorial(%s)' % (n))

total = 1

for i in range(n + 1):

total *= i

logging.debug('i is ' + str(i) + ', total is ' + str(total))

logging.debug('end of factorial(%s)' % (n))

return total

print(factorial(5))

logging.debug('end of program')

執行結果:

這裡首先載入 logging 模組,然後使用 basicconfig 方法,初始化日誌配置。日誌格式說明如下:

格式說明

%(asctime)s

日誌時間。

%(levelname)s

日誌級別名稱。

%(message)s

日誌具體內容。

通過 logging 模組所列印的 debug 日誌可以看出,因為 i 從 0 開始,導致階乘計算失敗,結果始終為 0。

修復程式,讓其從 1 開始:

執行結果:

採用日誌模組的好處是,通過配置,就可以控制日誌輸出級別或禁用日誌。這樣我們可以隨心所欲地在程式中的任意位置加上我們所需要的日誌。而 print() 方法就沒有這些好處。

「日誌級別」可以按重要性對日誌訊息進行分類。 5 個日誌級別如表 1 所示,從最不重要到最重要。利用不同的日誌級別函式,我們可以將需要記錄的內容按照某種級別寫入日誌。

表 1 logging 模組日誌級別

級別日誌函式

說明debug

logging.debug()

最低級別,一般用於**除錯,診斷問題。

info

logging.info()

記錄程式中一般事件,或確認一切工作正常。

warning

logging.warning()

警告日誌,表述可能存在的問題。

error

logging.error()

錯誤日誌,用於記錄錯誤,因為它導致程式執行某段邏輯失敗。

critical

logging.critical()

最高端別。用於表示致命錯誤,因為它導致程式停止工作。

日誌內容作為乙個字串,傳遞給以上這些日誌函式。最終,是由編碼者來決定採用哪種級別來記錄這些日誌。

我們可以控制日誌輸出級別,比如向向 basicconfig() 函式傳入 logging.debug 作為 level 關鍵字引數,這會

顯示所有日誌級別的訊息。如果將 level 引數設定為 logging.error,這樣只會顯示 error 和 critical 級別的訊息。也就是說,日誌級別指定在哪一級,對應級別及其以上級別,才會顯示出來。

利用 disable() 就可以關閉日誌功能。只要向 logging.disable() 傳入乙個日誌級別,它就會關閉該級別及其更低階別的所有日誌訊息。所以,如果想要關閉所有日誌,只要在程式中新增 logging.disable(logging.critical)。

執行結果:

因為 logging.disable() 將關閉它之後的所有日誌訊息,所以建議將它新增到程式中接近 import logging **行的位置。這樣可以容易找到它,然後根據實際需要,啟用或關閉日誌訊息。

利用 logging.basicconfig() 函式的 filename 關鍵字引數,我們可以把日誌訊息寫入檔案中。

import logging

# logging.disable(logging.critical)

logging.basicconfig(filename='log.txt',level=logging.debug, format='%(asctime)s - %(levelname)s - %(message)s')

這時,就會在 *.py 的同級目錄下找到寫入的 log.txt 日誌檔案。

python 如何在測試中使用 Mock

mock 的意思是模擬,也就是模擬介面返回的資訊,用已有的資訊替換它需要返回的資訊,從實現對所依賴的模組的測試。一般有兩種場景 前端mock可以通過一些工具來完成 後端的 mock 則是從介面的角度,如果乙個介面a返回的資料需要依賴於另乙個介面b,當敏捷開發中b介面還未開發完全時候這裡會需要用到 m...

如何在AndroidStudio中使用AIDL

本章節介紹如何在androidstudio中使用aidl 2.在aidl下建立乙個包,包裡建立乙個 aidl檔案,右鍵aidl new aidl aidl file 紅框就是建立完成後的樣子 3.在aidl檔案寫要被呼叫的方法,此方法不能有許可權修飾符 4.首先build下,然後建立乙個servic...

如何在python中使用表情(emoji)符號?

表情符號是世界上增長最快的語言,有超過3000種表情符號。那麼,為什麼不開始在我們的python程式中使用表情符號。在本文中,您將學習如何在python中使用表情符號。為了在python中使用表情符號,我們需要安裝乙個emoji庫,開啟命令提示符並執行此命令。pip install emoji 該命...