Que sont les marqueurs dans les frameworks Java Logging et quelle est une raison de les utiliser?

110

Première fois que j'entends parler des marqueurs lors de la lecture:

http://slf4j.org/faq.html

Je vérifie les méthodes disponibles pour l' objet Logger :

et trouvé des interfaces:

Des informations plus détaillées que je reçois de:

mais toujours confus ... Notez que je demande pourquoi , pas comment les utiliser, donc ce n'est pas un double de:

MISE À JOUR Il semble que lorsque vous utilisez des marqueurs, vous devez également écrire du code Java personnalisé au lieu de faire la configuration dans des fichiers XML ou .property ...

MISE À JOUR 2 Depuis 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"));
gavenkoa
la source
Pour utiliser des marqueurs, vous devez utiliser l'API de marqueur fournie par SLF4J. Est-ce ce que vous entendez par «code Java personnalisé»?
Ceki
@Ceki Il semble qu'utiliser uniquement Logger.warn (Marker, msg) ne vous apportait aucun avantage jusqu'à ce que vous écriviez une classe personnalisée pour les filtres et que vous les enregistriez ... La syntaxe simple de logback.xml n'a pas de capacités spéciales pour travailler avec Marker (juste imprimez-les par % marker )
gavenkoa
1
Que trouve-t-on "spécial" dans ce qui est présenté sur logback.qos.ch/manual/appenders.html#OnMarkerEvaluator ?
Ceki
@Ceki Merci pour le point! S'agit-il d'un seul endroit où les marqueurs peuvent être utilisés?
gavenkoa
1
@Ceki Maintenant que nous utilisons Elasticsearch, c'est le moyen de marquer des événements spéciaux. Nous conservons les marqueurs prédéfinis dans une classe dédiée pour la réutilisation. Ce n'était pas évident lorsque vous utilisiez simplement des grepjournaux de texte.
gavenkoa

Réponses:

118

Ceci est une version remaniée ma réponse à la question " Meilleures pratiques pour l'utilisation des marqueurs dans SLF4J / Logback ".

Les marqueurs peuvent être utilisés pour colorer ou marquer une seule instruction de journal. Ce que vous faites avec ces couleurs, c'est-à-dire les marqueurs, dépend entièrement de vous. Cependant, deux modèles semblent être communs pour l'utilisation des marqueurs.

  1. Déclenchement : certains appendeurs peuvent être invités à effectuer une action en présence d'un certain marqueur. Par exemple, SMTPAppenderpeut être configuré pour envoyer un e-mail chaque fois qu'un événement de journalisation est marqué avec le NOTIFY_ADMINmarqueur quel que soit le niveau de journalisation. Voir le déclenchement basé sur des marqueurs dans la documentation de logback. Vous pouvez également combiner des niveaux de journal et des marqueurs pour le déclenchement.

  2. Filtrage : les marqueurs sont très utiles pour faire ressortir certaines instructions de journal importantes. Par exemple, vous pouvez colorer / marquer tous vos journaux liés à la persistance (dans divers fichiers de classes multiples) avec la couleur "DB". Vous pouvez alors filtrer pour "DB": désactiver la journalisation sauf pour les instructions de journal marquées avec DB. Voir le chapitre sur les filtres dans la documentation de connexion pour plus d'informations (recherchez MarkerFilter). Notez que le filtrage sur les marqueurs peut être effectué non seulement par la connexion, mais également par des outils d'analyse des journaux.

Avant l'avènement des marqueurs, pour obtenir un comportement similaire, vous aviez l'option 1) en utilisant des niveaux personnalisés 2) d'utiliser des noms d'enregistreurs modifiés. L'API SLF4J ne prend actuellement pas en charge les niveaux personnalisés. Comme pour l'option 2, suffixer (ou préfixer) les noms des enregistreurs est possible si un ou deux enregistreurs doivent être modifiés. L'approche devient peu pratique dès lors que 3 ou plusieurs enregistreurs doivent être «sous-classés» car les fichiers de configuration associés deviennent ingérables.

Même si un seul marqueur peut déjà être très utile, la prochaine version de SLF4J, c'est-à-dire la version 2.0, autorisera plusieurs marqueurs par instruction de journal.

Ceki
la source
1
Peut également être utilisé dans SiftingAppender pour discrimnator stackoverflow.com/a/30552012/1012497
nikli