2012-02-15 11 views
5

¿Cuál es la forma más fácil de incluir nombre de usuario, nombre y apellido y e-amil en el error de seguimiento de django.Incluir usuario registrado de django en django Error de seguimiento

sé que el camino es create a custom error report:

  1. crear una nueva clase que innherit de django.views.debug.SafeExceptionReporterFilter
  2. Conjunto DEFAULT_EXCEPTION_REPORTER_FILTER

Pero, ¿qué método debe sobrescribir una para recibir traceback con esta información también?

me gustaría que mi mirada treceback gusta:

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: [email protected] 
+0

Aquí está una manera más limpia: http://stackoverflow.com/a/4946443/565259 – Tobu

+0

@tobu, muchas gracias. – danihp

Respuesta

7

lo hice usando middleware personalizado. No estoy seguro de que esta sea la mejor respuesta, pero así es como lo resolví para mi proyecto.

settings.py:

MIDDLEWARE_CLASSES = (
    ... 
    'utilities.custom_middleware.CustomMiddleware', 
    ... 
) 

utilidades/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 

utilidades/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) 
+0

Voy a probar. Regresaré con noticias. – danihp

+0

Estoy releyendo tu publicación. Estoy buscando una manera de agregar metainformación solo en excepciones, no para todas las solicitudes. Para evitar gastos generales ¿Qué piensas sobre esto? – danihp

+0

En la clase CustomMiddleware, puede anular process_exception y usar el mismo código que el anterior. Simplemente cambie 'def process_view (...' a 'def process_exception (...'. No lo he probado, pero creo que debería funcionar. Más información sobre el middleware personalizado aquí: https://docs.djangoproject.com/es/dev/topics/http/middleware/ – Furbeenator

8

Mi solución trivial (obras en django 1.5)

settings.py:

MIDDLEWARE_CLASSES = (
    ... 
    'utilities.custom_middleware.UserTracebackMiddleware', 
    ... 
) 

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" 

creo que sirve

+0

¿Por qué la conversión a unicode? –

Cuestiones relacionadas