python logging 模塊基礎(chǔ)
logging 模塊的基本原理是建立一個(gè)記錄器(logger),然后通過調(diào)用 logger 的方法來記錄消息。記錄器有一個(gè)級別,它決定了將記錄哪些消息。logging 模塊定義了幾個(gè)預(yù)定義的級別,包括 DEBUG、INFO、WARNING、ERROR 和 CRITICAL。
import logging # 創(chuàng)建一個(gè)名為 "my_logger" 的記錄器,并設(shè)置其級別為 INFO logger = logging.getLogger("my_logger") logger.setLevel(logging.INFO)
登錄后復(fù)制
記錄器可以通過其方法來記錄消息:
# 記錄一條 INFO 級別的消息 logger.info("This is an INFO message") # 記錄一條 WARNING 級別的消息 logger.warning("This is a WARNING message") # 記錄一條 ERROR 級別的消息 logger.error("This is an ERROR message")
登錄后復(fù)制
日志處理程序
日志處理程序(handler)將日志消息寫入特定目標(biāo),例如控制臺、文件或網(wǎng)絡(luò)服務(wù)器。logging 模塊提供了幾個(gè)預(yù)定義的處理程序:
# 創(chuàng)建一個(gè)控制臺處理程序 handler = logging.StreamHandler() # 創(chuàng)建一個(gè)文件處理程序,將日志寫入文件 "my_log.txt" handler = logging.FileHandler("my_log.txt")
登錄后復(fù)制
處理程序可以通過添加到記錄器來附加到記錄器:
# 將處理程序添加到記錄器 logger.addHandler(handler)
登錄后復(fù)制
日志格式器
日志格式器(fORMatter)控制日志消息的外觀。logging 模塊提供了幾個(gè)預(yù)定義的格式器:
# 創(chuàng)建一個(gè)基本格式器 formatter = logging.BasicFormatter() # 使用自定義格式字符串創(chuàng)建自定義格式器 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
登錄后復(fù)制
格式器可以通過添加到處理程序來附加到處理程序:
# 將格式器添加到處理程序 handler.setFormatter(formatter)
登錄后復(fù)制
常見問題
1. 如何在 Python 腳本中設(shè)置日志記錄級別?
import logging # 設(shè)置根日志記錄器的級別為 INFO logging.basicConfig(level=logging.INFO)
登錄后復(fù)制
2. 如何記錄異常?
try: # 嘗試執(zhí)行一些代碼 except Exception as e: # 記錄異常 logger.error(e, exc_info=True)
登錄后復(fù)制
3. 如何禁用特定處理程序?
# 禁用控制臺處理程序 logger.removeHandler(handler)
登錄后復(fù)制
4. 如何使用自定義日志格式?
# 使用自定義格式字符串創(chuàng)建自定義格式器 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # 將格式器添加到處理程序 handler.setFormatter(formatter)
登錄后復(fù)制
5. 如何捕獲未捕獲的異常并將其記錄到文件?
import sys import logging def exception_handler(type, value, traceback): # 記錄未捕獲的異常 logger.error(value, exc_info=(type, value, traceback)) sys.excepthook = exception_handler
登錄后復(fù)制
結(jié)論
Python logging 模塊是一個(gè)功能強(qiáng)大的工具,可以幫助您輕松地記錄和處理應(yīng)用程序消息。通過掌握其關(guān)鍵知識點(diǎn),您可以有效地使用 logging 模塊來調(diào)試、故障排除和分析應(yīng)用程序的行為。