首頁 > 軟體

Python使用紀錄檔模組快速偵錯程式碼並記錄異常資訊

2023-09-07 18:00:23

大家好,為了進行偵錯和錯誤跟蹤,人們在整個程式碼庫中廣泛使用紀錄檔,今天來看看如何在程式碼中定義紀錄檔,並探討紀錄檔的許可權。

一、紀錄檔層級

在開始之前,需要注意的是,在紀錄檔記錄中存在一個層次結構,稱為紀錄檔樹或紀錄檔者層次結構。該層次結構由幾個級別組成,每個級別代表了紀錄檔資訊的不同嚴重程度。最常見的層次是:

CRITICAL #A critical error occurred, the program may not be able to continue running.
ERROR    #An error occurred that should be investigated.
WARNING  #An indication that something unexpected happened or indicative of some problem in the near future.
INFO     #General information about the program's execution.
DEBUG    #Detailed information for debugging purposes.

二、建立模組

讓我們建立一個名為set_logging.py的python模組:

import logging
logger = logging.getLogger()
def set_logger():
  logger.setLevel(logging.INFO)
  handler = logging.StreamHandler()
  handler.setLevel(logger_level)
  formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  handler.setFormatter(formatter)
  logger.addHandler(handler)

為了明確程式碼,我們用getLogger函數建立一個紀錄檔器範例,並使用setLevel來設定紀錄檔級別(DEBUGINFO等)。紀錄檔器的setLevel方法就像一個過濾器,它決定了一條紀錄檔資訊是否應該被處理並行送給處理程式。例如,如果我們將紀錄檔記錄器的級別設定為INFO,那麼紀錄檔記錄器就不會向處理程式傳送級別為DEBUG的訊息,因為它們的嚴重程度低於在紀錄檔記錄器上設定的最低階別。它只將級別為INFO或更高的紀錄檔訊息(即WARNINGERRORCRITICAL)傳送給處理程式進行處理。

我們建立一個StreamHandler,將紀錄檔資訊傳送到一個流中,如控制檯或終端。它被用來輸出紀錄檔資訊以達到偵錯的目的。我們還為處理程式設定了級別。

我們這樣做是因為當處理程式收到來自紀錄檔記錄器的訊息時,它將把這些訊息與它的級別進行比較,並在發出之前過濾掉嚴重程度較低的訊息。當我們有不同的處理程式時:

logger.setLevel(logging.INFO)
file_handler = logging.FileHandler()
file_handler.setLevel(logging.ERROR)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)

由於紀錄檔記錄器的級別被設定為INFO,它只向兩個處理程式傳送級別為INFO或更高的紀錄檔訊息,但每個處理程式只處理達到或超過其指定紀錄檔級別的訊息。

回到我們的主要例子,然後我們建立一個格式化器並將其新增到處理程式中。格式化器指定了紀錄檔訊息的格式,包括時間戳、紀錄檔記錄器名稱、紀錄檔級別和訊息。最後,我們將處理程式新增到紀錄檔記錄器中"。

現在在程式碼中,需要呼叫set_logger,如下所示:

import logging
from set_logging import set_logger
set_logger()
logger = logging.getLogger()
def roman_number(s: str) -> int:
    dic = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    res = 0
    pre = None
    for char in s:
        res += dic.get(char)
        if dic.get(pre) and dic.get(pre) < dic.get(char):
            res -= 2 * dic.get(pre)
        pre = char
    logger.info("logging is awesome")
    return res
roman_number("IV")

執行這段程式碼,結果如下:

2023-03-04 02:26:57,619 - root - INFO - logging is awesome

三、使用紀錄檔的優點

  • 級別。一個紀錄檔記錄器提供了一種方法來為不同型別的訊息設定不同的紀錄檔級別,如DEBUGINFOWARNINGERRORCRITICAL。這使得根據紀錄檔訊息的嚴重程度來過濾和確定其優先順序變得更加容易。當然,列印可以模仿與紀錄檔相同的行為,但它需要更多的寫死工作,而且不像紀錄檔那樣靈活。
  • 效能。列印紀錄檔資訊可能比使用記錄器慢,特別是在處理大量資料或頻繁進行記錄的時候。
  • 可設定性。記錄器提供了一種方法來設定應用程式的紀錄檔行為,如紀錄檔級別、紀錄檔目的地和紀錄檔格式,而無需修改原始碼。這使得隨著時間的推移,更容易管理和維護紀錄檔行為。
  • 靈活性。記錄器允許你將紀錄檔資訊傳送到多個目的地,如控制檯、檔案或資料庫。這種靈活性使得管理紀錄檔和分析它們變得更加容易。

到此這篇關於Python使用紀錄檔模組快速偵錯程式碼並記錄異常資訊的文章就介紹到這了,更多相關Python紀錄檔模組偵錯內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com