The body of the mail request, as well as the Django administrator on server error

I am using the default logger in Django having the following configuration:

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

}

Therefore, whenever I get 500 errors, I correctly receive mail in the admin email id, but it does not send POST JSON request data. I am sending a request as shown below:

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

How can we configure django logger to send this request body?

+7
python django django-admin tastypie
source share
1 answer

we use an admin email handler like this one that works for any type of error. hope this works for you.

 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))) 
0
source share

All Articles