O que são marcadores nas estruturas Java Logging e qual é a razão para usá-los?


110

Primeira vez que ouço falar de marcadores quando leio:

http://slf4j.org/faq.html

Eu verifico os métodos disponíveis para o objeto Logger :

e interfaces encontradas:

Mais informações detalhadas eu obtenho em:

mas ainda confuso ... Observe que eu pergunto por que , não como usá-los, então esta não é uma duplicata de:

ATUALIZAÇÃO Parece que quando você usa marcadores, também precisa escrever código Java personalizado em vez de fazer a configuração em arquivos XML ou .property ...

ATUALIZAÇÃO 2 de http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
  "This is a serious an error requiring the admin's attention",
   new Exception("Just testing"));

Para usar marcadores, você precisa usar a API de marcadores fornecida por SLF4J. É isso que você quer dizer com "código Java personalizado"?
Ceki

@Ceki Parece que usar apenas Logger.warn (Marker, msg) não deu a você nenhum benefício até que você escrevesse uma classe personalizada para filtros e os registrasse ... A sintaxe simples de logback.xml não tem habilidades especiais para trabalhar com Marker (apenas imprima-os por % marcador )
gavenkoa

1
O que é "especial" no que é apresentado em logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki

@Ceki Obrigado pelo ponto! É apenas um lugar onde os marcadores podem ser usados?
gavenkoa

1
@Ceki Agora que estamos usando o Elasticsearch, é a maneira de marcar eventos especiais. Mantemos marcadores predefinidos em uma classe dedicada para reutilização. Não era óbvio quando você apenas usava greplogs de texto.
gavenkoa

Respostas:


117

Esta é uma versão reformulada da minha resposta à pergunta " Melhores práticas para usar marcadores em SLF4J / Logback ".

Os 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 para o uso do marcador.

  1. Disparando : algum appender pode ser instruído a realizar uma ação na presença de um determinado marcador. Por exemplo, SMTPAppenderpode ser configurado para enviar um e-mail sempre que um evento de registro for marcado com o NOTIFY_ADMINmarcador, independentemente do nível de registro. Consulte o acionamento baseado em marcador na documentação do logback. Você também pode combinar níveis de registro e marcadores para acionamento.

  2. Filtragem : os marcadores são muito úteis para destacar certas declarações de registro valiosas. Por exemplo, você pode colorir / marcar todos os seus logs relacionados à persistência (em vários e vários arquivos de classe) com a cor "DB". Você pode então filtrar por "DB": desabilite o registro, exceto para instruções de log marcadas com DB. Consulte o capítulo sobre filtros na documentação do logback para obter mais informações (procure por MarkerFilter). Observe que a filtragem de marcadores pode ser realizada não apenas por logback, mas também por ferramentas de análise de log.

Antes do advento dos marcadores, para obter um comportamento semelhante, você tinha a opção 1) usar níveis personalizados 2) usar nomes de logger modificados. A API SLF4J atualmente não oferece suporte a níveis personalizados. Quanto à opção 2, sufixar (ou prefixar) nomes de registradores é viável se um ou dois registradores precisarem ser modificados. A abordagem torna-se impraticável assim que 3 ou mais registradores precisam ser "subclassificados" porque os arquivos de configuração associados se tornam impossíveis de gerenciar.

Mesmo que um único marcador já possa ser muito útil, a próxima versão do SLF4J, ou seja, a versão 2.0, permitirá vários marcadores por instrução de log.


1
Também pode ser usado em SiftingAppender para discrimnator stackoverflow.com/a/30552012/1012497
nikli,
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.