簡體   English   中英

Django中的python登錄

[英]python logging in django

我在django中使用基本的python記錄器,似乎工作得很好。 我在我的setting.py中有日志記錄設置;

logging.baseConfig(level = logging.NOTSET,    
                   format='a format',    
                   datemt=' a datefmt',    
                   filename='path to log',    
                   filemode = 'a')    
logging.getLogger('').setLevel(logging.NOTSET)    

我的問題是關於傳播例外。 在我的代碼中,如果我有一個try / except子句並捕獲異常,以便可以對其進行日志記錄,那么傳播該錯誤以便重定向到我的500頁的最佳方法是什么。 我一直在用

try:
    do stuff
except Exception, e:
    logging.error(e)
    raise

但是我發現這導致該異常記錄兩次。 還有另一種方法可以執行此操作,還是我做錯了什么?

問候
安德魯

有沒有需要捕獲異常所以您可以登錄它。 您可以記錄並處理它,或者讓它冒泡到更高的水平,它將記錄並處理它。 如果您想記錄某些視圖中不想處理的異常 ,則可以安裝一些異常中間件 ,該中間件記錄異常並返回您確定的自定義響應,或者返回None (返回Django響應的任何響應)通常會返回)。

有可擴展的異常中間件的例子在這里 ,它實際上並沒有使用記錄,但其log_exception()方法,你可以繼承來記錄異常,或只使用該代碼段為指導,以提供自己的異常中間件-它基本上只是一個類使用一個名為process_exception的方法:

class MyExceptionMiddleware:

    def process_exception(self, request, exception):
        #Do your logging here

另外,請注意,記錄器具有exception()方法,該方法的作用類似於error()但在日志中包含回溯信息。

有一個食譜: http : //code.activestate.com/recipes/466332/

在任何復雜的應用程序中,您可能希望記錄並處理大多數異常。 配方顯示了一種將日志記錄與處理分開的方法,因此不必在每個try-except子句中顯式調用日志記錄機制。

暫無
暫無

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

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