2012-04-24 9 views
9

Am en Django 1.3, Python 2.6registro de Django - django.request registrador y el contexto adicional

En la documentación de Django aquí
https://docs.djangoproject.com/en/1.3/topics/logging/#django-request
se dice que los mensajes tienen el siguiente contexto adicional: situación y petición.
¿Cómo se consigue que aparezcan en el archivo de depuración? he intentado en mi registro de configuración algo como:

'formatters': {   
     'simple_debug': { 
      'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',   
     } 
    }, 

pero eso hace que el registro general a fallar (es decir, no hay salida de la tala ocurre)


EDIT: Así que inmediatamente después de la presentación de la pregunta i encontré esto: http://groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21

alguien puede ayudar a explicar/elaborada sobre

Toda la cita de los documentos realmente significa que todos los lugares dentro de de django donde se utiliza django.request, la solicitud es explícitamente pasado como parte de extra.

donde se ha pasado la solicitud explícitamente como parte de extra a?

Respuesta

19

No puede usar request.user en la cadena de formato, ya que% -formatting no maneja eso. Se puede usar un formato de cadena tales como

'[%(asctime)s] %(levelname)s %(module)s %(message)s %(user)s' 

y, en su registro de llamadas, usar algo como

logger.debug('My message with %s', 'args', extra={'user': request.user}) 

El dict extra se combina en el registro de registro de eventos, que termina con un atributo user , y esto luego se recoge a través de la cadena de formato y aparece en el registro.

Si utiliza el registrador django.request, el código de estado y la solicitud se aprobarán en el Dict depor Django. Si necesita el request.user, es probable que necesite añadir un logging.Filter el que hace algo como:

class RequestUserFilter(logging.Filter): 
    def filter(self, record): 
     record.user = record.request.user 
     return True 

para que pueda mostrar al usuario en la salida formateada.

+0

¡ah! eso tiene sentido. Gracias. –

0

El django-requestlogging middleware plugin hace que sea fácil para registrar la información relacionada con la solicitud, sin tener que ajustar todas sus llamadas a la tala añadir el request con el parámetro extra. Es solo cuestión de configurar tus registradores.

Los siguientes artículos se pueden registrar cuando se utiliza Django-requestlogging:

  • nombre de usuario
  • HTTP_USER_AGENT
  • PATH_INFO
  • remote_add
  • REQUEST_METHOD
  • SERVER_PROTOCOL
Cuestiones relacionadas