¿Hay alguna manera de insertar un nombre de usuario o id de nivel de aplicación (en este caso, el nombre de usuario o id de django) en el registro de Apache o ngnix? Tenga en cuenta que no estoy preguntando sobre el nombre de usuario HTTP auth.Inyectando nombre de usuario/ID de nivel de aplicación en nginx/Apache log
Respuesta
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.
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.
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"
- 1. Inyectando un apilador de Log4J en una aplicación de Grails
- 2. Configuración de nivel de aplicación en DDD?
- 3. Impersonación de nivel de dominio de aplicación
- 4. System.Web.Cache, nivel de sesión o nivel de aplicación
- 5. Sharding en el nivel de aplicación
- 6. Inicio de aplicación de dependencias resueltas de ninject Log-in
- 7. Inyectando HttpContext en Ninject 2
- 8. Análisis de Log en Python
- 9. Inyectando EntityManager vs. EntityManagerFactory
- 10. Aplicación multi-nivel de manejo de transacciones
- 11. variables de ámbito Android nivel de aplicación
- 12. Log Output en DBUnit
- 13. Inyectando datos a un servicio de WCF
- 14. Inyectando código en ejecutable en tiempo de ejecución
- 15. Inyectando cadena a 'cin'
- 16. Inyectando genéricos con Guice
- 17. Controladores vs. Vista de nivel de aplicación en Backbone.js
- 18. Teclas de acceso directo a nivel de aplicación en WPF
- 19. Aplicación vs nombre de aplicación en cadena de conexión
- 20. Nivel de volumen de iPod afecta el volumen de la aplicación Nivel
- 21. Inyectando el Inyector de Dependencia usando la Inyección de Dependencia
- 22. Inyectando valor externalizado en la anotación Spring
- 23. ¿Inyectando un EJB estático, tonterías?
- 24. Inyectando una dependencia en una clase estática
- 25. Ocultar widget de aplicación según el nivel de API
- 26. Spring - Inyectando una dependencia en un ServletContextListener
- 27. ¿Cómo puedo borrar el archivo log log?
- 28. Inyectando texto cuando se copia contenido de una página web
- 29. log4j -adaptive log level- feature
- 30. Nivel de batería en Phonegap
Excelente, no estaba al tanto de la opción "C" en el registro, eso probablemente funcionará. – Parand