Espero que Log4j no necesite ninguna introducción y asumo que ya tienes conocimientos básicos de Log4j. Si no es así, te recomendaré que primero leas este Tutorial de Log4j, para empezar.

Dicho esto, ahora empezaré con MDC o Contexto de Diagnóstico Mapeado. ¡No te asustes con este nombre! MDC no es tan difícil. Es un concepto simple pero útil. Antes de explicar lo que es MDC, vamos a suponer que vamos a desarrollar una aplicación web simple con un servlet MyServlet que sirve peticiones de múltiples clientes. Y, este servlet utiliza el framework log4j para el registro. Se ha definido un appender de archivos para este servlet, por lo que todos los mensajes de registro se registrarán en un archivo de texto.

Con la configuración anterior, todos los mensajes de registro de MyServlet irán a un único archivo de registro. Y cuando este servlet esté sirviendo a más de un cliente al mismo tiempo, las sentencias de registro se mezclarán y no habrá manera de diferenciar qué sentencia de registro pertenece al procesamiento de cada cliente. Esto dificultará el seguimiento y la depuración si se produce algún error de procesamiento en el ciclo de vida de MyServlet.

¿Cómo diferenciar las sentencias de registro con respecto a cada cliente?

Para evitar la mezcla de sentencias de registro, podríamos añadir un nombre de usuario (o algún otro dato que sea único para cada cliente) a nuestras sentencias de registro. Para hacer esto, tenemos que asegurarnos de pasar estos datos de nombre de usuario explícitamente a todas y cada una de las sentencias de registro, lo cual es un trabajo tedioso y repetitivo. Pero, ¡no hay que preocuparse! Log4j tiene una excelente manera de superar esto. Se llama MDC o Contexto de Diagnóstico Mapeado.

Entonces, ¿Qué es Log4j MDC (Contexto de Diagnóstico Mapeado)

Para ponerlo simple, el MDC es un mapa que almacena los datos del contexto del hilo particular donde el contexto se está ejecutando. Para explicarlo, volvamos a nuestra sencilla aplicación – cada petición del cliente será servida por un hilo diferente del MyServlet. Por lo tanto, si usted utiliza log4j para el registro, entonces cada hilo puede tener su propio MDC que es global para todo el hilo. Cualquier código que es parte de ese hilo puede acceder fácilmente a los valores que están presentes en el MDC del hilo.

Entonces, ¿cómo hacemos MDC para diferenciar las declaraciones de registro de múltiples clientes? Simple : Antes de iniciar cualquier proceso de negocio en su código, obtener el nombre de usuario (para nuestro Servlet, podemos obtenerlo de request objeto) y poner eso en MDC. Ahora el nombre de usuario estará disponible para el procesamiento posterior. En tu log4j.properties mientras defines el conversionPattern, añade un patrón %X{key} para recuperar los valores que están presentes en el MDC. La clave será userName en nuestro ejemplo. Es como obtener un valor de un objeto Session.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.