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 的功能,為您的應用程序創建靈活且有意義的日志記錄解決方案。