web-dev-qa-db-ja.com

ログバックでアペンダーを無効にできますか?

Xml構成のログバックでアペンダーを無効にできますか?構成があり、データベース用とテキストログ用の2つのアペンダーを配置したいのですが、アクティブ化する必要があるのは1つだけです。ありがとう!

11
Rys

アペンダーを非アクティブ化する理由がわからない場合、無効化することで何を達成しようとしていますか。

それを達成するためのいくつかの方法があります

  1. Logback.xmlにアペンダーを追加し、コメントを付けておきます。有効にする場合は、アペンダーのコメントを解除し、ログバック構成を再読み込みします( http://logback.qos.ch/manual/configuration.html#autoScan
  2. 以下のようなロガーを追加し、適切なロガーを使用してロギングします
    <configuration>
      <appender name="stdoutappender" />
      <appender name="dbappender" />
      <logger name="stdoutlogger" level="DEBUG">
        <appender-ref ref="stdoutappender" />
      </logger>

      <logger name="dblogger" level="OFF">
        <appender-ref ref="dbappender" />
      </logger>
    </configuration>   

この場合も、ログバック構成(logback.xml)を変更するときに構成を再ロードする必要があります。

  1. (アクティブ化/非アクティブ化するための)条件を事前に知っている場合は、ifelseブロックを使用して有効化/無効化してください

上記の3つのオプションに加えて、ログバック構成をプログラムで作成できます

11
Kaushal

アペンダーのログレベルを選択する簡単な方法は、ThresholdFilterを使用することです。例:

<appender name="ap.Console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>${logging.appender.console.level:-OFF}</level>
    </filter>
    <encoder>
        <pattern>${pattern}</pattern>
    </encoder>
</appender>

特定のアペンダーをアクティブ化する場合は、適切な-Dオプションを指定してjvmを実行する必要があります。上で定義されたアペンダーの場合、次のようになります。

Java -Dlogging.appender.console.level=DEBUG

もちろん、自動構成の再読み込みを有効にすると( http://logback.qos.ch/manual/configuration.html#autoScan )、アプリの実行中にフィルターレベルを変更できます。

私が提案したアプローチは、アプリを起動するたびに(さまざまなログレベルで)ログバック構成ファイルを変更したくない場合に便利です。対応する-Dオプションを指定してjvmを実行することにより、ログバック構成で使用されるプロパティを設定するだけです。

2
tomek