7

我创建了一个函数 log_error(request, traceback),我在我的异常中调用它。这会将错误信息写入数据库。现在,在我打开每个视图并将其添加到异常处理程序中之前,有没有办法自动将所有异常引发到一个函数,然后调用它?

我看过这个Python 错误记录,它说要编写你自己的 sys.excepthook 版本。出现异常时会自动调用该函数。我尝试了这个,但即使我将解决方案复制粘贴到 views.py 并引发错误,也没有调用 my_excepthook。但是,我并没有太努力,因为无论如何它并没有获得我需要的所有信息。我还需要请求,以便我可以记录与用户、网址等相关的信息。

也许这要求太多了?

(我正在使用 Django,但这似乎不是 Django 特有的东西) 编辑:是的,它是。

4

1 回答 1

6

JF 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/中也可以看出,我可以获得局部变量以及请求属性。

于 2012-11-08T10:18:34.263 回答