Espero que o Log4j não precise de nenhuma introdução e presumo que já tenha um conhecimento básico do Log4j. Se não, vou recomendar que leia primeiro este Tutorial do Log4j, para começar.

Dito isto, agora vou começar pelo MDC ou Contexto de Diagnóstico Mapeado. Não se assuste com este nome! O MDC não é assim tão difícil. É um conceito simples mas útil. Antes de explicar o que é MDC, vamos assumir que vamos desenvolver uma aplicação web simples com um servlet MyServlet que serve pedidos de vários clientes. E, este servlet usa o framework log4j para fazer log. Um arquivo appender foi definido para este servlet, então todas as mensagens de log serão registradas em um arquivo de texto.

Com a configuração acima, todas as mensagens de log de MyServlet irão para um único arquivo de log. E quando este servlet estiver servindo mais de um cliente ao mesmo tempo, as instruções de log serão misturadas e não há como diferenciar qual instrução de log pertence a qual cliente está processando. Isto tornará difícil rastrear e depurar se algum erro de processamento ocorreu em MyServlet ciclo de vida.

Como diferenciar as instruções de log com os respectivos clientes?

Para evitar a mistura das instruções de log, poderíamos adicionar um nome de usuário (ou alguns outros dados que serão únicos para cada cliente) às nossas instruções de log. Para fazer isso, temos que ter certeza de passar esses dados de nome de usuário explicitamente para cada instrução de log, o que é um trabalho tedioso e repetitivo. Mas, não precisa de se preocupar! O Log4j tem uma excelente forma de ultrapassar isto. É chamado como MDC ou Mapped Diagnostic Context.

So, What is Log4j MDC (Mapped Diagnostic Context)

Para simplificar, o MDC é um mapa que armazena os dados de contexto do thread particular onde o contexto está rodando. Para explicá-lo, volte à nossa aplicação simples – cada pedido de cliente será servido por um thread diferente do MyServlet. Então, se você usar log4j para logar, então cada thread pode ter seu próprio CDM, que é global para toda a thread. Qualquer código que faça parte dessa thread pode facilmente acessar os valores presentes no MDC da thread.

Então, como fazemos o MDC para diferenciar as declarações de log de múltiplos clientes? Simples : Antes de iniciar qualquer processo de negócio no seu código, obtenha o nome do utilizador (para o nosso Servlet, podemos obtê-lo a partir de request object) e coloque-o no MDC. Agora o nome do usuário estará disponível para o processamento posterior. No seu log4j.properties enquanto define o conversionPattern, adicione um padrão %X{key} para recuperar os valores que estão presentes no MDC. A chave será userName no nosso exemplo. É como obter um valor de um objeto Session.

Deixe uma resposta

O seu endereço de email não será publicado.