首頁 >後端開發 >Python教學 >如何使用日誌模組記錄 Python 中未處理的異常?

如何使用日誌模組記錄 Python 中未處理的異常?

Barbara Streisand
Barbara Streisand原創
2024-10-23 00:10:03886瀏覽

How Can I Log Unhandled Exceptions in Python Using the Logging Module?

在 Python 中記錄未捕獲的異常

除非明確處理,否則 Python 異常預設會輸出到程式的標準錯誤流 (stderr)。但是,在某些情況下,可能需要使用日誌記錄模組來記錄未捕獲的異常。

記錄未捕獲異常的傳統方法是在except 區塊中手動使用logging.exception(e) 方法,如下所示:

<code class="python">try:
    raise Exception, 'Throwing a boring exception'
except Exception, e:
    logging.exception(e)</code>

但是,為每個未捕獲的異常自動呼叫logging.exception(...) 消除了手動步驟。

實作

考慮以下程式碼片段:

<code class="python">import sys
import logging

# Custom logger with handler for stdout
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Custom exception handler to log uncaught exceptions
def handle_exception(exc_type, exc_value, exc_traceback):
    # Ignore KeyboardInterrupt for Ctrl + C exit
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Assign custom exception handler
sys.excepthook = handle_exception

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

此修改後的腳本完成了幾個關鍵任務:

  • 自訂日誌記錄:利用日誌記錄模組格式化並記錄未擷取的例外狀況。
  • 標準輸出處理:使用自訂處理程序將異常定向到 stdout,確保它們顯示在控制台視窗中。
  • 選擇性異常處理: 忽略鍵盤中斷異常以透過 Ctrl C 保持優雅的控制台退出。

透過使用 handle_exception 覆寫預設異常處理程序,將使用配置的記錄器自動記錄未捕獲的異常,從而增強可見性並促進偵錯。

以上是如何使用日誌模組記錄 Python 中未處理的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn