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

时间:2012-11-08 08:04:48

标签: python django exception logging

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

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

也许那要求太多了?

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

1 个答案:

答案 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/中我也可以看到我可以获取局部变量以及请求属性。