2011-02-09 45 views

回答

7

因爲process_exception中間件被傳入的請求對象,你可以添加你喜歡的任何信息,以request.META

class ErrorMiddleware(object): 
    """ 
    Alter HttpRequest objects on Error 
    """ 

    def process_exception(self, request, exception): 
     """ 
     Add user details. 
     """ 
     request.META['USER'] = request.user.username 
2

製作一個具有process_exception方法的中間件。 http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception

import sys 
import traceback 
from django.conf import settings 
from django.core.mail import mail_admins 

class ProcessExceptionMiddleware(object): 
    def process_exception(self, request, exception): 
     if not settings.DEBUG: 
      msg = '\n\n'.join([request.user, request.GET, request.POST, \ 
       request.COOKIES, request.META, traceback.format_exc(*sys.exc_info())]) 

      mail_admins("Error!", msg) 

我希望給你一些想法!

+0

這是大量的幫助,謝謝:)不幸的是,你不能阻止BaseHandler繼續處理錯誤並因此發送給你一個電子郵件,除非你返回一個HTTPResponse ...並獲得兩個電子郵件的每個錯誤是過度殺傷 – 2011-02-09 14:46:48

+0

哦,哎。文檔甚至建議讓管理員空白以停止自動發送電子郵件,這樣你就是對的,這是行不通的。不錯的解決方案!這是一個很乾淨的地獄。 – 2011-02-09 14:56:24

相關問題