Python/Django:在发生异常时自动记录,包括请求信息

use*_*003 7 python django logging exception

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

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

也许那要求太多了?

(我正在使用Django,但这似乎不是Django特有的东西)编辑:是的,确实如此.

use*_*003 5

JF Sebastian 的建议奏效了。这是一个 Django 解决方案。

在 settings.py MIDDLEWARE_CLASSES 中:

(我将它添加为最后一个,不确定这是正确的还是会导致错误。现在有效。)

'myapp.middleware.ExceptionMiddleware',
Run Code Online (Sandbox Code Playgroud)

在 myapp.middleware.py 中:

import traceback
class ExceptionMiddleware(object):
    def process_exception(self, request, exception):
        log_error(traceback, request)
Run Code Online (Sandbox Code Playgroud)

就是这样。log_error 是我的函数并写入数据库。从文档https://docs.djangoproject.com/en/dev/howto/error-reporting/中也可以看出,我可以获得局部变量以及请求属性。