2011-07-25 4 views

Respuesta

2

Hacemos algo como esto, solo le decimos a Apache que almacene la cookie de sesión de Django.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{sessionid}C" withsession 
CustomLog logs/example.com-access_log withsession 

Es una especie de un proceso de dos pasos para mapear la sessionid para el usuario, pero es fácil de implementar. Puede hacer algo similar configurando una cookie con la identificación explícita y luego usando el registro personalizado para capturarla.

+0

Excelente, no estaba al tanto de la opción "C" en el registro, eso probablemente funcionará. – Parand

13

Actualmente estoy usando un corto middleware personalizado para agregar estos datos a las cabeceras de respuesta, de la siguiente manera:

class RemoteUserMiddleware(object): 
    def process_response(self, request, response): 
     if request.user.is_authenticated(): 
      response['X-Remote-User-Name'] = request.user.username 
      response['X-Remote-User-Id'] = request.user.id 

     return response 

Con esto en su lugar, sólo se puede utilizar %{X-Remote-User-Name}o and %{X-Remote-User-Id}o en su configuración de Apache (o similar para nginx) y obtenga la información directamente en sus registros.

0

Si usted tiene una cookie para el nombre de usuario, por ejemplo "uname", es posible añadir% uname {} C, de esta manera:

LogFormat "%{X-Forwarded-For}i %{uname}C %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

Aquí reenviado-X-A es la dirección IP del usuario. Mi servidor de aplicaciones es tomcat8 con seguridad de primavera. La salida es así:

24.xx.xx.xxx user.name - - [09/Sep/2016:19:33:21 -0400] "GET /xxxx HTTP/1.1" 304 - "https://xxx/xxx" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 
Cuestiones relacionadas