在django Traceback错误中包含django登录用户

dan*_*era 5 django

在django Traceback错误中包含用户名,名字和姓氏以及电子邮件的简单方法是什么?

我知道方法是创建自定义错误报告:

  1. 从django.views.debug.SafeExceptionReporterFilter创建一个新类
  2. 设置DEFAULT_EXCEPTION_REPORTER_FILTER

但是,应该覆盖哪种方法来接收回溯以及此信息呢?

我希望我的treceback看起来像:

Traceback (most recent call last):

 File "/usr...o/core/handlers/base.py", line 89, in get_response
   response = middleware_method(request)

 File "/.../g...ap/utils/middleware.py", line 23,...
   if elapsedTime.min > 15:

TypeError: can't compare datetime.timedelta to int

Logged user information:
User:    pepito
name:    Pepito Grillo
e-mail:  grillo@peppeto.com
Run Code Online (Sandbox Code Playgroud)

And*_*tti 8

我的琐碎解决方案(适用于django 1.5)

settings.py:

MIDDLEWARE_CLASSES = (
    ...
    'utilities.custom_middleware.UserTracebackMiddleware',
    ...
)
Run Code Online (Sandbox Code Playgroud)

custom_middleware.py:

class UserTracebackMiddleware(object):
    """
    Adds user to request context during request processing, so that they
    show up in the error emails.
    """
    def process_exception(self, request, exception):
        if request.user.is_authenticated():
            request.META['AUTH_USER'] = unicode(request.user.username)
        else:
            request.META['AUTH_USER'] = "Anonymous User"
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Fur*_*tor 7

我使用自定义中间件做到了.我不确定这是最好的答案,但这是我为我的项目解决的问题.

settings.py:

MIDDLEWARE_CLASSES = (
    ...
    'utilities.custom_middleware.CustomMiddleware',
    ...
)
Run Code Online (Sandbox Code Playgroud)

公用事业/ custom_middleware.py:

from utilities.request import AddRequestDetails

class CustomMiddleware(object):
"""
    Adds user details to request context during request processing, 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 request to add some variables to it.
        """

        # Add other details about the user to the META CGI variables.
        try:
            if request.user.is_authenticated():
                AddRequestDetails(request)
                request.META['AUTH_VIEW_ARGS'] = str(view_args)
                request.META['AUTH_VIEW_CALL'] = str(view_func)
                request.META['AUTH_VIEW_KWARGS'] = str(view_kwargs)
        except:
            pass
Run Code Online (Sandbox Code Playgroud)

公用事业/ request.py:

def AddRequestDetails(request):
"""
    Adds details about the user to the request, so any traceback will include the 
    details. Good for troubleshooting; this will be included in the email sent to admins 
    on error. 
"""
if request.user.is_anonymous():
    request.META['AUTH_NAME'] = "Anonymous User"
    request.META['AUTH_USER'] = "Anonymous User"
    request.META['AUTH_USER_EMAIL'] = ""
    request.META['AUTH_USER_ID'] = 0
    request.META['AUTH_USER_IS_ACTIVE'] = False
    request.META['AUTH_USER_IS_SUPERUSER'] = False
    request.META['AUTH_USER_IS_STAFF'] = False
    request.META['AUTH_USER_LAST_LOGIN'] = ""
else:
    request.META['AUTH_NAME'] = str(request.user.first_name) + " " + str(request.user.last_name)
    request.META['AUTH_USER'] = str(request.user.username)
    request.META['AUTH_USER_EMAIL'] = str(request.user.email)
    request.META['AUTH_USER_ID'] = str(request.user.id)
    request.META['AUTH_USER_IS_ACTIVE'] = str(request.user.is_active)
    request.META['AUTH_USER_IS_SUPERUSER'] = str(request.user.is_superuser)
    request.META['AUTH_USER_IS_STAFF'] = str(request.user.is_staff)
    request.META['AUTH_USER_LAST_LOGIN'] = str(request.user.last_login)
Run Code Online (Sandbox Code Playgroud)