Django-如何记录错误并显示消息

时间:2019-08-28 07:24:12

标签: python django

当前,我们使用django logger记录错误并将电子邮件发送给管理员。

# settings.py
'handlers': {
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
            },
            'applogfile': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',
            }
       },
'loggers': {
    'django': {
                'handlers': ['applogfile', 'mail_admins'],
                'level': 'ERROR',
            },
        }

我们要创建自定义用户错误页面,因此我们创建了一个中间件来处理异常:

# exceptionMiddleware.py

class ExceptionMiddleware:
    def process_exception(self, request, exception):
        message = str(exception) if isinstance(exception, BusinessLogicException) else "Sorry, we encountered an unexpected error"
        return HttpResponse( message )

此中间件的问题是日志记录机制停止工作。如何获取在settings.py中设置的记录器以从exceptionMiddleware.py运行?

谢谢!

1 个答案:

答案 0 :(得分:1)

感谢威廉(Willem)的提示,这是答案:

设置通用错误消息“对不起,我们遇到了错误”

#urls.py

handler500 = 'mysite.views.my_custom_error_view'

,然后在中间件中,仅返回BusinessLogicException

#exceptionMiddleware.py

class exceptionMiddleware:
    def process_exception(self, request, exception):
        if not isinstance(exception, BusinessLogicException):
            return None
        return HttpResponse(str(exception))