当前,我们使用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运行?
谢谢!
答案 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))