Comment puis-je configurer Logback pour enregistrer différents niveaux d'un enregistreur vers différentes destinations?
Par exemple, étant donné la configuration de Logback suivante, Logback enregistrera-t-il les INFO
messages STDOUT
et les ERROR
messages vers STDERR
?
(Notez que cet exemple est une variante de l'exemple logback-examples/src/main/java/chapters/configuration/sample4.xml
présenté dans le Chapitre 3: Configuration de Logback ).
<configuration>
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="STDERR"
class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
<target>System.err</target>
</appender>
<!-- What is the effective level of "chapters.configuration"? -->
<logger name="chapters.configuration" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="chapters.configuration" level="ERROR" additivity="false">
<appender-ref ref="STDERR" />
</logger>
<!-- turn OFF all logging (children can override) -->
<root level="OFF">
<appender-ref ref="STDOUT" />
</root>
</configuration>
levels are ordered as follows: TRACE < DEBUG < INFO < WARN < ERROR.
Réponses:
Mise à jour: pour une approche basée sur toutes les configurations utilisant Groovy, voir la réponse de Dean Hiller .
-
Vous pouvez faire des choses intéressantes avec les filtres Logback . La configuration ci-dessous affichera uniquement les messages d'avertissement et d'erreur sur stderr, et tout le reste sur stdout.
logback.xml
com.foo.StdOutFilter
com.foo.ErrOutFilter
la source
Je pense que ce serait la solution la plus simple:
la source
ThresholdFilter
s à la place.<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
quel est le rôle réel de la spécification<root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="STDERR" /> </root>
dans logback.xml?<onMatch>
et<onMismatch>
ne sont pas définis pourThresholdFilter
. Retirez-les simplement et cela fonctionnera comme prévu.Solution basée uniquement sur la configuration , avec un ThresoldFilter et des LevelFilters pour garder les choses vraiment simples à comprendre :
la source
ThresoldFilter
.ThresoldFilter
STDOUT, au lieu d'utiliser cinqLevelFilter
?ok, voici ma manière xml préférée de le faire. Je fais ça pour la version eclipse donc je peux
et pour une raison quelconque, SO ne montre pas tout cela correctement, mais la plupart semblent être là ...
la source
logback.groovy
version de cette ligne de look?La solution la plus simple consiste à utiliser
ThresholdFilter
sur les appenders:Exemple complet:
Mise à jour: comme Mike l'a souligné dans le commentaire, les messages avec le niveau ERROR sont imprimés ici à la fois vers STDOUT et STDERR. Je ne sais pas quelle était l'intention du PO, cependant. Vous pouvez essayer la réponse de Mike si ce n'est pas ce que vous vouliez.
la source
C'est la configuration que j'utilise, qui fonctionne bien, elle est basée sur XML + JaninoEventEvaluator (nécessite l' ajout de la bibliothèque Janino à Classpath)
la source
J'utilise logback.groovy pour configurer ma connexion, mais vous pouvez également le faire avec la configuration xml:
Je pense que l'utilisation de GEventEvaluator est plus simple car il n'est pas nécessaire de créer des classes de filtre.
Je m'excuse pour mon anglais!
la source
Essaye ça. Vous pouvez simplement utiliser les fichiers intégrés
ThresholdFilter
etLevelFilter
. Pas besoin de créer vos propres filtres par programmation. Dans cet exemple, les niveaux WARN et ERROR sont enregistrés dans System.err et reposent sur System.out:la source
Je ne prends aucun crédit pour cette réponse, car il s'agit simplement d'une combinaison des deux meilleures réponses ci-dessus: celle de X. Wo Satuk et celle de Sébastien Helbert:
ThresholdFilter
c'est joli mais vous ne pouvez pas le configurer pour avoir un niveau supérieur ainsi qu'un niveau inférieur *, mais en le combinant avec deuxLevelFilters
réglé sur "DENY"WARN
etERROR
fonctionne un régal.Très important : n'oubliez pas le
<target>System.err</target>
tag dans l'appender STDERR: mon omission de celui-ci m'a frustré pendant quelques minutes.* il a cependant une méthode
decide
dans l' API mais je n'ai aucune idée de la façon dont vous l'utiliseriez dans ce contexte.la source
Aucune programmation nécessaire. la configuration vous simplifie la vie.
Vous trouverez ci-dessous la configuration qui enregistre différents niveaux de journaux dans différents fichiers
la source
la source
Exemple de sortie des messages colorés de niveau "INFO" ou supérieur vers la console et des messages de niveau "WARN" ou supérieur vers un fichier .
Votre fichier logback.xml :
la source