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).

36
demandé sur TylerH 2013-09-16 16:07:08

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.

46
répondu sheltem 2014-09-24 08:30:19

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>

5
répondu m.piunti 2014-01-29 11:38:02