web-dev-qa-db-ja.com

ログバック構成のオーバーライド

ログバック構成をオーバーライドできる方法はありますか? logback.xmlという名前のファイル(通常はsrc/resourcesパスに格納されている)でログバック構成を定義していることを知っており、<include>タグ以下のように、logback.xmlに追加する外部ファイルを設定できます。

<configuration>

<!--<include url="file:///d:/ServerConfig.xml"/>-->
<include file="${outPut}/ServerConfig.xml"/>


<logger name="Server" LEVEL="DEBUG">
    <appender-ref ref="FILEOUT" />
</logger>

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

</configuration>

しかし、このデフォルト設定をオーバーライドしたい場合はどうでしょうか(たとえば、ルートロガー、レベルをINFOに設定)

ところで、ここに含まれているファイルは次のとおりです。

<included>

<!-- <property file="d:/ServerSysVar.properties"/>-->
<property file="${outPut}/ServerSysVar.properties"/>


<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>



<appender name="FILEOUT" class="ch.qos.logback.core.FileAppender">
    <file>${Sys_Location}/Serverfile4.log</file>
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %class{36}.%M %L CLIENT_PORT:%X{ClientPort}- %msg%n</pattern>
    </encoder>
</appender>


<logger name="Service" LEVEL="DEBUG">
    <appender-ref ref="FILEOUT" />
</logger>

 <root>
    <appender-ref ref="STDOUT" />
   <!-- <appender-ref ref="FILEOUT" />-->
</root>

</included>
27
Mr.Q

インクルードファイルからlogback.xml- definitionsを上書きできるとは思わない。

しかし、ルートロガーレベルのオーバーライドに関する質問を解決するアプローチがあります。デフォルト値で 変数置換 を使用します。

logback.xml

<configuration>
  <include file="includedFile.xml" />

  <!-- STDOUT appender stuff -->

  <root level="${root.level:-DEBUG}">
    <appender-ref ref="STDOUT" />
  </root>
<configuration>

includedFile.xml

<included>

  <!-- override the default value; or comment out to leave it at default -->
  <property name="root.level" value="INFO" />

</included>

そのコンセプトにより、含まれているファイルから複数のアペンダーへの出力を制御することさえできました。

logback.xml

<configuration>
  <include file="includedFile.xml" />

  <!-- STDOUT appender stuff -->

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>${file.level:-ALL}</level>
    </filter>
    <file>/path/to/logfeil.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>${syslog.level:-OFF}</level>
    </filter>
    <syslogHost>localhost</syslogHost>
    <facility>${syslog.facility:-LOCAL1}</facility>
    <suffixPattern>${syslog.pattern:-[%thread] %logger{36} - %msg}</suffixPattern>
   </appender>

  <logger name="my.package" level="${logging.level:-INFO}" additivity="false">
    <appender-ref ref="FILE" />
    <appender-ref ref="SYSLOG" />
  </logger>

  <root level="${root.level:-DEBUG}">
    <appender-ref ref="STDOUT" />
  </root>
<configuration>

そして、includedFile.xmlで、メッセージをアペンダーFILEおよびSYSLOGに渡すかどうか、およびどのレベルで制御することができるか、プロパティfile.levelsyslog.levelを設定します。もちろんlogging.level

22
Hank

この答えが最良のアプローチと思われるのと同様の問題がありました。

私の場合、アペンダーの1つを完全にオフにするには、含まれているファイルをオーバーライドする必要がありました。

ログレベル値の変数を使用して、OFFに変更できます。

<included>
  (...)
  <root level="${root.level.console:-DEBUG}">
    <appender-ref ref="CONSOLE" />
  </root>
  <root level="${root.level.file:-DEBUG}">
    <appender-ref ref="FILE" />
  </root>
</included>

http://logback.qos.ch/manual/configuration.html#rootElement に記載されているとおり

<configuration>
  <include resource="base.xml" />
  (...)
  <property name="root.level.console" value="OFF" />
</configuration>
2
tiago