簡體   English   中英

Python記錄SMTPHandler-處理脫機SMTP服務器

[英]Python logging SMTPHandler - handling offline SMTP server

我已經為新的python腳本設置了日志記錄模塊。 我有兩個處理程序,一個將內容發送到文件,另一個用於電子郵件警報。 SMTPHandler設置為以ERROR或更高級別發送任何郵件。

除非SMTP連接失敗,否則一切正常。 如果SMTP服務器不響應或身份驗證失敗(需要SMTP身份驗證),則整個腳本將消失。

我是python的新手,所以我試圖找出如何捕獲SMTPHandler引發的異常,以便通過電子郵件發送日志消息的任何問題都不會破壞我的整個腳本。 由於我還將錯誤寫入日志文件,因此如果SMTP警報失敗,我只想繼續前進,而不要停止任何操作。

如果我需要一個“ try:”語句,它將遍歷logging.handlers.SMTPHandler設置,還是圍繞my_logger.error()的各個調用?

在日志記錄期間發生的異常不應停止您的腳本,盡管它們可能導致回溯打印到sys.stderr 為了防止此打印輸出,請執行以下操作:

logging.raiseExceptions = 0

這不是默認值(因為在開發過程中通常要了解故障),但是在生產中,不應設置raiseExceptions

您應該發現,下次記錄ERROR(或更高版本)時, SMTPHandler將嘗試重新連接。

logging 確實會通過SystemExitKeyboardInterrupt異常傳遞,但應處理所有其他異常,以免它們導致使用日志記錄的應用程序終止。 如果發現不是這種情況,請發布正在發生的異常並導致腳本終止的特定詳細信息,以及有關您的Python /操作系統的版本。 請記住,如果網絡超時導致處理程序阻塞(例如,如果DNS查找需要很長時間,或者SMTP連接需要很長時間),則腳本可能似乎掛起。

您可能需要兩者都做。 為了解決這個問題,我建議安裝一個本地郵件服務器並使用它。 這樣,您可以在腳本運行時將其關閉並記下錯誤消息。

為了保持代碼的可維護性,您應該以一種可以在一個地方處理異常的方式擴展SMTPHandler(而不是使用try-except包裝每個記錄程序調用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM