Comment créer 2 loggers racine différents avec logback?
J'utilise heureusement SLF4J avec logback et utilise 2 appenders pour l'enregistreurROOT .
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
Comment pourrions-nous avoir différents niveaux de log pour les deux appenders? J'ai toujours besoin de tous les messages ROOT-logger.
- DEBUG - niveau pour STDOUT
- INFO - niveau pour le fichier
Tous les journaux doivent faire partie de la sortie (l'enregistreur racine est donc nécessaire).
2 réponses
Vous n'aurez jamais plus d'un Root-logger, donc votre question est un peu trompeuse. Ce que vous cherchez, c'est comment affiner les événements que chacun des appenders enregistre.
Et pour cela, vous ajoutez un ThresholdFilter à chacun des appenders:
Http://logback.qos.ch/manual/filters.html#thresholdFilter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
Configurez les informations de niveau pour le fichier-appender et déboguez pour STDOUT.
Edit: je dois contester l'accusation de l'autre réponse que celui-ci est faux: Oui, vous pouvez avoir plus d'un élément root- dans la configuration. Cela ne crée pas plus d'une racine-logger, ce qui était ce que le titre de la question demande. En outre, le manuel de logback indique sous http://logback.qos.ch/manual/configuration.html#syntax (mettant en évidence le mien):
Néanmoins, la structure très basique du fichier de configuration peut être décrit comme, élément, suivi de zéro ou plus éléments, suivi de zéro ou plus éléments, suivi de au plus un élément .
Cela pourrait fonctionner, mais à tout le moins c'est contre la convention.
La réponse précédente est tort: vous pouvez avoir plusieurs root
éléments, associés chacun à une journalisation level
et appender-ref
(je travaille avec logback.version > 1.0.13
)
Dans ce cas, vous devez également mettre un filtre dans vos appenders, comme ça:
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<!-- To enable JMX Management -->
<jmxConfigurator/>
<appender name="console-info" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<appender name="console-debug" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>[%d{ddMMMyyyy HH:mm:ss.SS}]%-5level %logger{45} - %msg %n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console-info"/>
</root>
<root level="debug">
<appender-ref ref="console-debug"/>
</root>