web-dev-qa-db-ja.com

logbackで2つの異なるROOTロガーを作成する方法は?

私は喜んでSLF4Jをlogbackで使用しており、[〜#〜] root [〜#〜]ロガーに2 appendersを使用しています。

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>

どうすれば両方のアペンダーに異なるログレベルを設定できますか?まだすべてのROOT-loggerメッセージが必要です。

  • [〜#〜] debug [〜#〜]-STDOUTのレベル
  • [〜#〜] info [〜#〜]-FILEのレベル

すべてのログは出力の一部である必要があります(そのため、ROOTロガーが必要です)。

41
Dimitri Dewaele

ルートロガーが複数あることはないので、質問は少し誤解を招く可能性があります。探しているのは、各アペンダーが記録するイベントを微調整する方法です。

そのために、各アペンダーにThresholdFilterを追加します。

http://logback.qos.ch/manual/filters.html#thresholdFilter

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  <level>INFO</level>
</filter>

FILE-appenderのレベルINFOおよびSTDOUTのDEBUGを構成します。

編集:私はこれが間違っているという他の回答の請求に異議を唱えなければなりません:はい、構成に複数のroot-elementを持つことができます。ただし、複数のroot-loggerが作成されるわけではありません。これは、質問のタイトルが求めるものです。また、ログバックマニュアルには http://logback.qos.ch/manual/configuration.html#syntax (鉱山のハイライト)の下に次のように記載されています。

それにもかかわらず、構成ファイルの非常に基本的な構造は、<configuration>要素、ゼロ以上の<appender>要素、ゼロ以上の<logger>要素、(最大で1つ<root>要素。

動作するかもしれませんが、少なくとも慣習に反しています。

52
sheltem

前の答えはwrong:複数のroot要素を持つことができ、それぞれに関連するロギングlevelappender-ref(logback.versionを使用しています> 1.0.13)この場合、次のように、アペンダー内にFILTERも配置する必要があります。

<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>
4
m.piunti