2014-02-25 25 views
1

我想記錄500內部服務器錯誤期間發生的追溯。我已經成立了中間件,我希望這樣做:通過中間件記錄500錯誤追蹤

import traceback 
import sys 

import logging 
logger = logging.getLogger(__name__) 

class ProcessExceptionMiddleware(object): 
    ''' 
    Log exceptions and tracebacks any time an exception is encountered 
    ''' 

    def process_response(self, request, response):· 
     if response.status_code == 500: 
      logger.info('\n'.join(traceback.format_exception(*sys.exc_info()))) 
     return response 

唉,當發生500錯誤,該中間件被觸發,sys.exc_info()返回(無,無,無)。 response本身是一個包含回溯的字符串,但它是一種奇怪的格式化字符串,不容易解析。我想要回溯格式化爲一個很好的列表格式,如sys.exc_info()會給我。我怎樣才能得到這個工作?

請注意,process_exception不可能,因爲這是針對不使用Django Views的API,並且process_exception僅捕獲視圖中引發的異常。

回答

0

Django已經知道如何用完整的回溯記錄未處理的錯誤。默認配置是通過郵件將報告發送到settings.ADMINS,但您可以重新配置記錄器以寫入日誌文件,syslog,stderr或其他任何內容。完整的文檔在這裏https://docs.djangoproject.com/en/1.6/topics/logging/

+0

在理論上似乎很好,但我還沒有看到一個工作示例,它不必以某種方式利用中間件。我不知道爲什麼。如果你有一個你在野外看到過的工作,我就會全神貫注。 – user1427661

+0

這不是理論上的,你不必滾動自己的中間件來記錄未處理的異常。所需要的只是配置你想要的處理程序,並將其添加到設置中的'django.requests'記錄器中。 –