我创建了一个函数log_error(request,traceback),我在异常中调用它。这会将错误信息写入数据库。现在,在我打开每个视图并将其添加到异常处理程序之前,有没有办法自动将所有异常引发到函数,然后调用它?
我见过这个Python error logging,它写了自己编写的sys.excepthook版本。出现异常时会自动调用此函数。我尝试了这个,但是即使我将解决方案复制粘贴到views.py并引发错误,也没有调用my_excepthook。但是,我并没有太努力,因为它无法获得我需要的所有信息。我还需要请求,以便我可以记录用户,网址等信息。
也许那要求太多了?
(我正在使用Django,但这似乎不是特定于Django的东西)编辑:是的,它是。
答案 0 :(得分:3)
J.F Sebastian的建议奏效了。这是一个Django解决方案。
在settings.py中MIDDLEWARE_CLASSES:
(我将它添加为最后一个,不确定这是否正确或将导致错误。现在可以使用。)
'myapp.middleware.ExceptionMiddleware',
在myapp.middleware.py中:
import traceback
class ExceptionMiddleware(object):
def process_exception(self, request, exception):
log_error(traceback, request)
就是这样。 log_error是我的函数并写入数据库。从文档https://docs.djangoproject.com/en/dev/howto/error-reporting/中我也可以看到我可以获取局部变量以及请求属性。