2016-03-08 26 views
7

używam domyślnego rejestratora w Django mającego następującej konfiguracji:Poczta prośba ciała, jak również do Django Admin natomiast błąd serwera

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, 
    }, 
} 

}

Więc kiedy ja dostaję błąd 500 Mam poprawnie dostaniem maile w adresie e-mail administratora, ale nie wysyła danych JSON żądania POST. Wysyłam żądanie, jak poniżej:

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

Jak możemy skonfigurować rejestrator django, aby wysłać tę treść żądania?

+0

warto spojrzeć na to http://stackoverflow.com/a/13940055/2028375 –

+0

Nie to naprawdę zalogować żądanie? Mam bardzo, bardzo podobne domyślne ustawienia rejestrowania i widzę cały obiekt żądania w moich dziennikach. Dokumenty Django wskazują nawet, że obiekt żądania jest rejestrowany za pomocą dodatkowego argumentu: https://docs.djangoproject.com/ja/1.9/topics/logging/#django-request, który wskazuje, że albo go nie widzisz i tam, lub masz coś nadpisanego gdzieś w swoim kodzie, aby nie zachowywał się tak, jak został zbudowany. –

+0

@TitusP Nie, nie wysyła całego obiektu żądania. Wysyła tylko request.GET, request.POST, request. PLIKI, request.COOKIES i request.META, natomiast podczas publikowania danych w Content-Type: application/json, dane przychodzą w request.body –

Odpowiedz

0

używamy obsługi poczty e-mail administratora, która działa dla każdego rodzaju błędu. mam nadzieję, że to działa dla ciebie.

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)))