簡介
logging 模塊是 python 中用于日志記錄的標準庫。它提供了對應用程序中事件進行日志記錄的統一界面,并允許開發人員定義日志級別的細粒度控制、格式化日志消息以及將日志輸出到各種目標(例如文件、控制臺或網絡套接字)。
入門
創建一個 Logger
要開始日志記錄,首先需要創建一個 logger 對象。logger 可以通過 logging.getLogger(name) 函數創建,其中 name 是一個標識符字符串,用于識別logger。
import logging
# 創建一個名為 "my_logger" 的 logger
logger = logging.getLogger("my_logger")
登錄后復制
記錄日志消息
可以使用 logger.log(level, msg, *args, **kwargs) 方法記錄日志消息,其中:
level:日志消息的級別。
msg:日志消息的。
*args 和 **kwargs:可選參數,用于格式化日志消息。
logger.info("程序已啟動")
logger.error("發生錯誤!")
登錄后復制
日志級別
logging 模塊定義了以下日志級別(從最低到最高):
DEBUG:用于調試目的的詳細信息。
INFO:用于常規應用程序消息。
WARNING:用于引起注意的問題。
ERROR:用于錯誤和例外情況。
CRITICAL:用于嚴重錯誤或應用程序崩潰。
NOTSET:禁用日志記錄。
可以將日志級別設置為 logger.level 屬性。例如,要將 my_logger 的級別設置為 WARNING,可以使用:
logger.level = logging.WARNING
登錄后復制
格式化器
格式化器用于控制日志消息的外觀。可以通過 logging.F<strong class="keylink">ORM</strong>atter 類創建格式化器,它具有以下參數:
fmt:日志消息的格式字符串。
datefmt:日期和時間的格式字符串(可選)。
# 創建一個格式化器,包含時間戳、日志級別和日志消息
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
登錄后復制
處理器
處理器用于將日志消息輸出到特定目標。logging 模塊提供了一些開箱即用的處理器,例如:
logging.StreamHandler:將日志消息輸出到控制臺。
logging.FileHandler:將日志消息輸出到文件。
logging.<strong class="keylink">Socket</strong>Handler:將日志消息輸出到網絡套接字。
# 創建一個處理器,將日志消息輸出到控制臺 handler = logging.StreamHandler() # 將格式化器添加到處理器 handler.setFormatter(formatter) # 將處理器添加到 logger logger.addHandler(handler)
登錄后復制
過濾器
過濾器用于根據特定條件篩選日志消息。logging 模塊提供了以下過濾器:
logging.Filter:基本過濾器,允許或拒絕日志消息。
logging.LevelFilter:基于日志級別篩選日志消息。
logging.MessageFilter:基于日志消息本身篩選日志消息。
# 創建一個過濾器,僅允許 INFO 和 WARNING 級別的日志消息 filter = logging.LevelFilter(logging.INFO) # 將過濾器添加到處理器 handler.addFilter(filter)
登錄后復制
高級用法
層次結構日志記錄
Python logging 模塊支持層次結構日志記錄,其中 logger 可以繼承其父 logger 的屬性和行為。這允許建立一個具有不同級別的日志細粒度的日志記錄結構。
自定義日志記錄級別
還可以創建自定義日志記錄級別,以便更好地適應應用程序的特定需求。這可以通過 logging.addLevelName(level_name, level_value) 函數實現。
擴展 Logging 模塊
可以通過自定義類和函數擴展 logging 模塊,以實現更高級或特定的日志記錄功能。例如,可以創建自己的處理器或過濾器來滿足特定要求。
結論
Python logging 模塊是一個強大的工具,用于應用程序中的日志記錄。它提供了靈活性和可定制性,允許開發人員根據應用程序的特定需求構建日志記錄系統。通過遵循本教程中概述的基本原則和高級技術,可以最大限度地利用 logging 模塊,并為應用程序實現高效且信息豐富的日志記錄。






