首頁 > 後端開發 > Python教學 > Python中logging日誌模組程式碼怎麼調試

Python中logging日誌模組程式碼怎麼調試

WBOY
發布: 2023-05-10 16:31:06
轉載
1151 人瀏覽過

一、日誌層級

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

CRITICAL #A critical error occurred, the program may not be able to continue running.
ERROR    #An 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

#三、使用日誌的優點

  • 級別。一個日誌記錄器提供了一種方法來為不同類型的消息設定不同的日誌級別,例如DEBUGINFO WARNINGERRORCRITICAL。這使得根據日誌訊息的嚴重程度來過濾和確定其優先順序變得更加容易。當然,列印可以模仿與日誌相同的行為,但它需要更多的硬編碼工作,而且不像日誌那樣靈活。

  • ##效能

    。列印日誌資訊可能比使用記錄器慢,特別是在處理大量資料或頻繁進行記錄的時候。

  • 可配置性

    。記錄器提供了一種方法來配置應用程式的日誌行為,如日誌等級、日誌目的地和日誌格式,而無需修改原始程式碼。這使得隨著時間的推移,更容易管理和維護日誌行為。

################################# ####靈活性###。記錄器允許你將日誌資訊傳送到多個目的地,例如控制台、檔案或資料庫。這種靈活性使得管理日誌和分析它們變得更加容易。### ######

以上是Python中logging日誌模組程式碼怎麼調試的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板