2016-03-08 52 views
7

我使用的默認記錄器具有以下配置的Django:郵件請求主體以及對Django管理,同時服務器錯誤

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'filters': { 
'require_debug_false': { 
    '()': 'django.utils.log.RequireDebugFalse' 
    } 
}, 
'handlers': { 
    'mail_admins': { 
     'level': 'ERROR', 
     'filters': ['require_debug_false'], 
     'class': 'django.utils.log.AdminEmailHandler' 
    }, 
    'console': { 
     'level': 'DEBUG', 
     'class': 'logging.StreamHandler' 
    } 
}, 
'loggers': { 
    'django.request': { 
     'handlers': ['mail_admins', 'console'], 
     'level': 'ERROR', 
     'propagate': True, 
    }, 
} 

}

所以每當我得到500錯誤,我正確地獲取郵件在管理員電子郵件ID,但它不發送POST請求JSON數據。我發送請求如下:

curl -X POST -H 'Content-Type: application/json' http://127.0.0.1/api/customer/ -d "{'username':'rajeevnith', 'frist_name': 'Rajeev', 'last_name':'Bahrdwaj'}" 

我們如何配置django記錄器發送此請求正文以及?

+0

你可能想看看這個http://stackoverflow.com/a/13940055/2028375 –

+0

它真的沒有記錄請求嗎?我有一個非常非常類似的默認日誌記錄設置,我看到我的日誌中的整個請求對象。 Django文檔甚至指出使用額外參數記錄請求對象:https://docs.djangoproject.com/ja/1.9/topics/logging/#django-request它向我表明,要麼你只是沒有看到它並且它在那裏,或者你的代碼中的某處覆蓋了某些東西,使它不像它的構建方式那樣行事。 –

+0

@TitusP不,它不發送整個請求對象。它只發送request.GET,request.POST,請求。 FILES,request.COOKIES和request.META,而在Content-Type:application/json中發佈數據時,數據進入request.body –

回答

0

我們使用這樣的管理郵件處理程序,它適用於任何類型的錯誤。希望對你有效。

class MyAdminEmailHandler(AdminEmailHandler): 

    def __init__(MyAdminEmailHandler, include_html=False, email_backend=None): 
     super(MyAdminEmailHandler, self).__init__(self, include_html, email_backend) 

    def emit(self, record): 
     try: 
      request = record.request 
      subject = '%s (%s IP): %s' % (
       record.levelname, 
       ('internal' if request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS 
       else 'EXTERNAL'), 
       record.getMessage() 
      ) 
      filter = get_exception_reporter_filter(request) 
      request_repr = '\n{0}'.format(force_text(filter.get_request_repr(request))) 
     except Exception: 
      subject = '%s: %s' % (
       record.levelname, 
       record.getMessage() 
      ) 
      request = None 
      request_repr = "unavailable" 
     subject = self.format_subject(subject) 

     if record.exc_info: 
      exc_info = record.exc_info 
     else: 
      exc_info = (None, record.getMessage(), None) 

     message = "%s\n\nRequest repr(): %s" % (self.format(record), request_repr) 

     reporter = ExceptionReporter(request, is_email=True, *exc_info) 
     html_message = reporter.get_traceback_html() if self.include_html else None 

     try: 
      mail.mail_admins(subject, message, fail_silently=True, 
          html_message=html_message, 
          connection=self.connection()) 
     except Exception as e: 
      console_logger.warn("%s : %s" % (__name__, str(e))) 
相關問題