Registrar la actividad del usuario en la aplicación web

Me gustaría poder registrar las actividades del usuario en una aplicación web. Actualmente estoy usando log4j, que funciona bien para registrar errores, etc., pero no estoy seguro de cuál es el mejor enfoque para registrar el usuario, el método de servlet ejecutado y los parámetros del método. Estoy usando seguridad de spring para la autenticación.

Un servlet típico podría verse así:

public class BankAccountServlet { @RequestMapping("/deposit") public void deposit(double amount) { ... } @RequestMapping("/checkBalance") public double checkBalance() { ... } } 

Si hay dos usuarios, foo y bar, donde foo verifica su saldo y la barra deposita dos sums de efectivo 10.00 y 5.00. Me gustaría que los registros se vean así:

 01/01/1970 23:59:59 - foo - checkBalance 02/01/1970 23:59:59 - bar - deposit - 10.00 02/01/1970 23:59:59 - bar - deposit - 5.00 

Si alguien pudiera ofrecerme algún consejo, realmente agradecería su ayuda.

De hecho, es bastante simple lograr el uso de la funcionalidad MDC / NDC integrada en Log4J (SLF4J y Logback solo son compatibles con MDC).

Implementando el filtro MDC

Primero, implemente un filtro de servlet que agregará el nombre de usuario a MDC / NDC. Logback proporciona MDCInsertingServletFilter conveniente, Spring framework también agrega Log4jNestedDiagnosticContextFilter a la tienda. Míralos pero necesitarás uno personalizado como este:

 public class UserToMdcFilter implements javax.servlet.Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { MDC.put("user", SecurityContextHolder.getContext().getAuthentication().getPrincipal()); try { chain.doFilter(request, response); } finally { MDC.remove("user"); } } //... } 

Agregar valor de MDC a su patrón de registro

Asegúrese de que este filtro se aplique en web.xml después del filtro de seguridad de Spring. La característica de MDC es realmente ingeniosa: agregará todos los valores guardados en el mapa local de subprocesos de MDC a todas y cada una de las declaraciones de registro si así lo solicita. En tu caso, simplemente agrega esto:

 %X{user} 

a su patrón de registro.

Parámetros / valores del método de registro discreto

El nombre del método de registro, los parámetros y los valores de retorno dependen de usted (el nombre de usuario se agregará automáticamente), pero hay algunas maneras elegantes de eliminar por completo el código de registro repetitivo. Pruebe este aspecto integrado de Spring:

        

Pensamientos finales

He usado log4j en el pasado para registrar más que solo errores. Agregué tags INFO a través de mi código y cambio el nivel de registro. De esa manera, si decide que ya no necesita registrar esas actividades, simplemente puede cambiar el nivel de registro y listo. Espero que eso ayude.

Si desea iniciar sesión en los registros de Sever, use el método ServletContext.log () que utiliza el mecanismo de registro de contenedor y registra en los registros de contenedor.

Intereting Posts