首頁  >  文章  >  後端開發  >  Python logging 模組解密:揭露其不為人知的一面

Python logging 模組解密:揭露其不為人知的一面

王林
王林轉載
2024-03-08 08:19:17350瀏覽

Python logging 模块解密:揭示其不为人知的一面

1. 日誌等級:精準控制日誌資訊

#logging 模組定義了五種標準日誌等級:DEBUG、INFO、WARNING、ERROR 和 CRITICAL。這些等級決定了要記錄的訊息的重要性和嚴重性。預設情況下,logging 僅記錄 WARNING 及以上等級的訊息。您可以透過設定日誌器的等級來微調日誌的行為。例如:

import logging

# 设置 root 日志器的级别为 INFO
logging.basicConfig(level=logging.INFO)

2. 日誌格式:客製化日誌輸出

logging 模組提供了強大的日誌格式機制,可讓您自訂日誌訊息的外觀。格式字串指定了日誌訊息中包含的訊息,例如時間戳記、日誌等級、訊息文字和堆疊追蹤。預設格式為:

"[%(asctime)s] %(levelname)s %(module)s.%(funcName)s: %(message)s"

您可以使用以下程式碼自訂格式:

# 设置自定义日志格式
logging.basicConfig(fORMat="%(asctime)s %(levelname)-8s %(message)s")

3. 日誌處理器:擴充日誌輸出目的地

處理器負責將日誌訊息傳送到特定目標,例如檔案、控制台或遠端伺服器。 logging 模組提供了幾種內建處理器,如 StreamHandler 和 FileHandler。

建立自訂處理器也非常簡單。您需要建立一個類別並覆寫 handle 方法,該方法將日誌訊息寫入目標。例如,將日誌寫入自訂檔案:

class MyFileHandler(logging.FileHandler):
def __init__(self, filename):
super().__init__(filename)

# 将自定义处理器添加到 root 日志器
logging.getLogger().addHandler(MyFileHandler("my_log.txt"))

4. 日誌篩選器:過濾不必要的日誌訊息

#篩選器可讓您根據特定的條件過濾日誌訊息。您可以基於日誌等級、訊息文字或其他標準來建立篩選器。篩選器可以附加到處理器,以僅允許滿足條件的訊息通過。

例如,忽略 WARNING 等級的訊息的篩選器:

import logging

# 创建筛选器忽略 WARNING 级别的消息
filter = logging.Filter()
filter.filter = lambda record: record.levelno < logging.WARNING

# 将筛选器添加到 root 日志器的处理器
logging.getLogger().handlers[0].addFilter(filter)

5. 日誌上下文管理:優雅的日誌記錄

#logging.LoggerContextManager 上下文管理器提供了一種簡潔的方式來記錄區塊中的訊息。這對於臨時更改日誌等級或停用日誌記錄非常有用。

with logging.LoggerContextManager():
# 临时将日志级别设置为 DEBUG
logging.getLogger().setLevel(logging.DEBUG)

# 在块内记录 DEBUG 级的消息
logging.debug("调试信息")

6. 進階技巧:

  • 使用字典配置器:使用字典配置器提供更靈活的配置選項。
  • 建立自己的日誌等級:透過編寫自訂日誌等級來擴充內建等級。
  • 使用日誌記錄框架:例如 structlog 或 loguru,提供進階功能和可擴充性。
  • 非同步日誌記錄:透過使用非同步處理器來提高大型應用程式的效能。
  • 日誌記錄異常:使用 logging.exception() 或 logging.log_exception() 記錄異常堆疊追蹤。

結論:

python logging 模組是一個功能強大的工具,可用於有效地記錄應用程式活動。透過理解日誌等級、日誌格式、日誌處理器、日誌篩選器和進階技巧,您可以充分利用 logging 的功能,為您的應用程式建立靈活且有意義的日誌記錄解決方案。

以上是Python logging 模組解密:揭露其不為人知的一面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:lsjlt.com。如有侵權,請聯絡admin@php.cn刪除