registro django – registrador django.request y contexto adicional

Estoy en Django 1.3., Python 2.6

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

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

pero eso hace que el registro general falle (es decir, no se produce ninguna salida de registro)


EDIT: Entonces, inmediatamente después de enviar la pregunta, encontré esto: http://groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21

alguien puede ayudar a explicar / elaborar en

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

¿Dónde se pasa la solicitud explícitamente como parte de extra?

No puede usar request.user en la cadena de formato, ya que% -formatting no lo maneja. Podría usar una cadena de formato como

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

y, en su llamada de registro, use algo como

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

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

Si usa el registrador django.request , el código de estado y la solicitud se pasarán en el dictado extra de Django. Si necesita la request.user , probablemente necesitará agregar un logging.Filter 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.

El complemento middleware django-requestlogging facilita el registro de la información relacionada con la solicitud sin necesidad de ajustar todas las llamadas de registro para agregar la request con el parámetro extra . Entonces solo es cuestión de configurar sus registradores.

Se pueden registrar los siguientes elementos al usar django-requestlogging:

  • nombre de usuario
  • http_user_agent
  • path_info
  • remote_add
  • método de solicitud
  • server_protocol