Django错误报告—如何知道哪个用户触发了错误?

时间:2023-01-14 17:12:23

Is there a way I can customize Django error reporting so when it emails me it lets me know which user triggered the error?

是否有一种方法可以自定义Django错误报告,以便它在给我发邮件时让我知道是哪个用户触发了错误?

I'm in Django 1.2 if it matters.

我在Django 1。2中。

Much Thanks in advance!

提前谢谢!

2 个解决方案

#1


14  

If you don't want to use sentry you can use this simple middleware to attache the user-infos to the error mail:

如果您不想使用哨兵,您可以使用这个简单的中间件来协调用户信息到错误邮件:

# source: https://gist.github.com/646372
class ExceptionUserInfoMiddleware(object):
    """
    Adds user details to request context on receiving an exception, so that they show up in the error emails.

    Add to settings.MIDDLEWARE_CLASSES and keep it outermost(i.e. on top if possible). This allows
    it to catch exceptions in other middlewares as well.
    """

    def process_exception(self, request, exception):
        """
        Process the exception.

        :Parameters:
           - `request`: request that caused the exception
           - `exception`: actual exception being raised
        """

        try:
            if request.user.is_authenticated():
                request.META['USERNAME'] = str(request.user.username)
                request.META['USER_EMAIL'] = str(request.user.email)
        except:
            pass

You can simply put this class in a *.py file anywhere below your Django project and add a reference to MIDDLEWARE_CLASSES. I.e. if you put it in a file "middleware" in the project root (where your settings.py is) , you simply add middleware.ExceptionUserInfoMiddleware.

你可以把这个类放在一个*中。py文件位于Django项目的任何位置,并添加对MIDDLEWARE_CLASSES的引用。也就是说,如果你把它放在项目根目录的文件“中间件”中(在那里你的设置)。py是),您只需添加中间件。

#2


2  

I highly recommend http://readthedocs.org/docs/sentry/en/latest/index.html for the job.

我强烈推荐http://readthedocs.org/docs/sentry/en/latest/index.html做这项工作。

#1


14  

If you don't want to use sentry you can use this simple middleware to attache the user-infos to the error mail:

如果您不想使用哨兵,您可以使用这个简单的中间件来协调用户信息到错误邮件:

# source: https://gist.github.com/646372
class ExceptionUserInfoMiddleware(object):
    """
    Adds user details to request context on receiving an exception, so that they show up in the error emails.

    Add to settings.MIDDLEWARE_CLASSES and keep it outermost(i.e. on top if possible). This allows
    it to catch exceptions in other middlewares as well.
    """

    def process_exception(self, request, exception):
        """
        Process the exception.

        :Parameters:
           - `request`: request that caused the exception
           - `exception`: actual exception being raised
        """

        try:
            if request.user.is_authenticated():
                request.META['USERNAME'] = str(request.user.username)
                request.META['USER_EMAIL'] = str(request.user.email)
        except:
            pass

You can simply put this class in a *.py file anywhere below your Django project and add a reference to MIDDLEWARE_CLASSES. I.e. if you put it in a file "middleware" in the project root (where your settings.py is) , you simply add middleware.ExceptionUserInfoMiddleware.

你可以把这个类放在一个*中。py文件位于Django项目的任何位置,并添加对MIDDLEWARE_CLASSES的引用。也就是说,如果你把它放在项目根目录的文件“中间件”中(在那里你的设置)。py是),您只需添加中间件。

#2


2  

I highly recommend http://readthedocs.org/docs/sentry/en/latest/index.html for the job.

我强烈推荐http://readthedocs.org/docs/sentry/en/latest/index.html做这项工作。