Estamos usando a combinação SLF4J + Logback em nosso projeto já há algum tempo e estamos bastante satisfeitos com isso, mas nossa estratégia de registro é bastante simples, usando loggers baseados em classes simples e nada sofisticado como MDC ou marcadores.
O que eu quero saber é se alguém da comunidade realmente usa esses recursos e como eles são usados para melhorar o registro / filtragem.
Estou especialmente interessado em onde, por que e como alguém usaria [1] Marcadores para o registro. Eles me parecem um recurso bastante interessante para adicionar contexto semântico ao registro - por exemplo, enquanto uma classe pode estar lidando com várias preocupações, pode-se usar marcadores específicos de tarefa / preocupação para discriminar declarações de log.
Quais podem ser as melhores práticas, convenções ou estratégias para criar e usar marcadores no log.
Atualização: Eu acho que o que realmente estou procurando não é tanto o porquê de usar marcadores, mas a parte how - existem algumas práticas recomendadas de nomear marcadores (por exemplo, usar texto sem formatação com espaços ou nomes de estilo de palavra-chave delimitados por traços / sublinhados / pontuação ), deve haver algum tipo de pool de "nomes padrão", nomeando itens com base nas funções de negócios. As perguntas que eu provavelmente posso descobrir por mim mesmo, mas se eu quiser usar esses recursos sistematicamente e apresentá-los a uma equipe de desenvolvedores, faz sentido ter um conjunto formal de diretrizes por aí ...
[1] - Ao perguntar como usar marcadores, não estou realmente perguntando como usar a API (é realmente bastante simples) - estou me referindo ao nível mais geral de como alguém configuraria o log usando marcadores de forma consistente
Primeiro, MDC.
O MDC é realmente útil em um ambiente em que você tem uma "entidade" associada a algum comportamento. Um exemplo típico: usuário interagindo com um aplicativo da web. Então, digamos que você tenha muitos usuários brincando com seu aplicativo da web. Usando o MDC, você pode rastreá-los facilmente sem muito trabalho. Exemplo simplificado:
Aqui, você está usando o MDC em dois locais: para nome de usuário e ID da sessão. Dessa forma, você pode facilmente saudar a sessão de um usuário para ver tudo o que está fazendo.
Segundo, marcadores.
Os marcadores geralmente são usados para circunstâncias "especiais", como o envio de um email a um administrador por alguns erros críticos. Nem todos os erros sempre caem na mesma categoria; alguns têm que ser tratados de maneira apropriada.
Ou, quando um usuário sai do seu serviço, ele geralmente acessa um log INFO, mas você também pode usar um marcador para tais instâncias, se desejar que eventos como este sejam inseridos em um arquivo de log separado, para que você possa monitorá-lo. mais facilmente para a coleta estatística de usuários que saem.
Regra prática:
fonte
Marcadores podem ser usados para colorir ou marcar uma única instrução de log. O que você faz com essas cores, ou seja, marcadores, depende inteiramente de você. No entanto, dois padrões parecem ser comuns (o primeiro mais comum que o segundo) para o uso de marcadores.
Disparo : algum solicitante pode ser instruído a executar uma ação na presença de um determinado marcador. Por exemplo,
SMTPAppender
pode ser configurado para enviar um email sempre que um evento de log for marcado com oNOTIFY_ADMIN
marcador, independentemente do nível do log. Consulte o disparo baseado em marcador na documentação do logback. Você também pode combinar níveis e marcadores de log para acionar.Filtragem : por exemplo, você pode colorir / marcar todos os seus logs relacionados à persistência (em vários e múltiplos arquivos de classe) com a cor "DB". Você pode filtrar o "DB": desabilite o log, exceto as instruções de log marcadas com DB. Consulte o capítulo sobre filtros na documentação do logback para obter mais informações (pesquise MarkerFilter).
fonte
Assim como um adendo, se você estiver usando o logstash e o json log ativado, existe outro uso potencial do Marker - para que as variáveis de log sejam associadas a uma mensagem de log específica. Isso é mais consistente e mais fácil de analisar do que incluí-lo no corpo da mensagem. Muito útil, se for adequado ao seu caso de uso.
Veja detalhes aqui:
https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event
fonte