web-dev-qa-db-ja.com

コンソールへのすべてのログバック出力を抑制しますか?

コンソールへのすべての出力(標準出力)を抑制するようにLogbackを構成するにはどうすればよいですか?特に、次のようなLogback自身のログメッセージを抑制(またはリダイレクト)します。

16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16:50:25,814 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,816 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml]
16:50:25,923 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
16:50:25,924 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@1a15291 - Will scan for changes in file [/opt/dap/domains/ap0491/uat1/domain/instance-config/logback.xml] every 60 seconds. 

本番環境では、アプリケーションがメッセージを標準出力に出力できないため、標準出力へのすべてのロギングを無効にする必要があります。

注私はLogback 0.9.21、SLF4J 1.6.0を使用しており、アプリケーションはWebLogic 10.3.2で実行されています。

52
Derek Mahar

HolgerHoffstätteは、 diagnosis で、重複したクラスパスエントリメッセージが bug のログバックがクラスパスエントリをカウントする方法の症状であることを修正しました。ロバート・エリオットも 特性化 の問題 スレッド 上のログバック ユーザーメーリングリスト 。この関連する disussion のRobertおよびその他によると、Logbackを使用するアプリケーションがWebLogicコンテナで実行されると、WebLogicクラスローダーの動作方法により、Logbackはlogback.xml構成ファイル。ただし、WebLogicクラスローダーが一意のクラスパスエントリのみをレポートするかどうかに関係なく、Logbackは一意のクラスパスエントリのみをカウントするため、この紛らわしい偽のメッセージは出力されません。

fix for LBCLASSIC-159 を実装しました。これは、本質的にRobert Elliotが推奨することを行い、リストの代わりにセットを使用してクラスローダーが返すリソースを保持します。クラスパスリソースが重複しています。 Logback 0.9.24、SLF4J 1.6.1、およびWebLogic 10.3.2で修正を正常にテストしました。 Thorbjørnが answer で予測したように、この修正を適用すると、Logbackは重複したクラスパスエントリステータスメッセージ(またはその他の情報メッセージ)を標準出力に表示しなくなりました。

メンテナーが私の修正をメインのLogback ソースコードリポジトリ に統合し、次のリリースに含めることを願っています。

16
Derek Mahar

これらのメッセージは、次の少なくとも1つが当てはまる場合にのみ表示されます。

  • logback.xmlファイルでデバッグを有効にしている
  • 構成にエラーがあります。それがここに当てはまります-ログバックは複数の設定ファイルが見つかったことを訴えます。
  • 環境が競合するファイルを提供する場合、クラスパスの問題があります。 (これは昨日私に発生し、この質問の本当の原因でした)。
  • (ログバックにバグがあります-起こりました)

問題を修正すると、それらのメッセージは消えます。

これは「私も」答えです、ごめんなさい!

幸いなことに、私は以下の解決策を見つけました(更新を参照)。

他のいくつかの答えとは反対に、構成フェーズにINFOsまたはERRORsがないにもかかわらず、LogBack構成WARNメッセージのストリームを取得しています。

メッセージは次のとおりです。

13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
13:39:20,457 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/carl/workspace-LSY/.metadata/.plugins/org.Eclipse.wst.server.core/tmp0/wtpwebapps/IceProfile/WEB-INF/classes/logback.xml]
13:39:20,496 |-INFO in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@14e2c9c - Will scan for changes in file [/home/carl/workspace-LSY/.metadata/.plugins/org.Eclipse.wst.server.core/tmp0/wtpwebapps/IceProfile/WEB-INF/classes/logback.xml] every 60 seconds. 
13:39:20,496 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter
13:39:20,497 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:39:20,501 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
13:39:20,510 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
13:39:20,510 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Pushing component [encoder] on top of the object stack.
13:39:20,537 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG
13:39:20,537 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF
13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [ch.qos.logback] to false
13:39:20,538 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

私の設定は次のとおりです。

<configuration debug="true" scan="true"> 

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

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>

  <logger name="ch.qos.logback" level="OFF" additivity="false" />

</configuration>

これは私が望んでいないスパムであり、自分がそれを引き起こしたことは無実であると私は考えています。

私が「有罪」になる可能性がある1つの点は、static変数でロガーを初期化することです。代わりにインスタンス変数の使用を推奨しています。

バージョン:

  • logback-classic-0.9.24.jar
  • logback-core-0.9.24.jar
  • slf4j-api-1.6.1.jar
  • ubuntu 11.04のTomcat 6.0で実行されているIceFaces 2.0アプリで実行する

[〜#〜] update [〜#〜]

最後に、問題が何であるかがわかりました!

細かいマニュアル (および Thorbjørnの答え )から:

要素内でデバッグ属性を設定すると、次の仮定の下でステータス情報が出力されます

  1. 構成ファイルが見つかりました
  2. 構成ファイルは整形式のXMLです。

私の間違いは

<configuration debug="true" scan="true"> 

振り返ってみると、duh !この情報が他の人に役立つことを願っています。

15
Carl Smotricz

だから私は同じ問題を抱えていたが、誤った<layout />エントリを削除することを発見した。

アペンダーは次のようになります

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

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

 <encoder>
  <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss} %.-1level %thread %logger{36}: %m%n</pattern>
 </encoder>

</appender>

私は complete についてブログに書いた

8

Logbackに慣れていません。ただし、System.outまたはSystem.err、これらは単にPrintStreamクラスのpublic static System変数です。 PrintStreamをサブクラス化し、システム出力変数をサブクラスに設定して、動作を制御できます。

例えば:

public class NOPPrintStream extends PrintStream
{
    public NOPPrintStream() { super((OutputStream)null); }

    public void println(String s) { /* Do nothing */ }
    // You may or may not have to override other methods
}

public class MyClass
{
    public static void main(String[] args)
    {
        System.out = new NOPPrintStream();
        // Start program
    }
}

(このコードはテストされていません)

3
Brian S

実際、同じlogback.xmlの場所が複数回報告されるという事実は、他の何よりもlogbackのバグのようです。これをログバックJIRAに報告する( here )か、最初に問題のjarがクラスパスに複数回存在するかどうかを確認します。

2

私の場合、webapp jarとしてデプロイされている依存プロジェクトに「logback-test.xml」がありました。 「logback-test.xml」ファイルは

<configuration debug="false" scan="true">

'scan = "true"'属性は次のエラーを生成しました。

ERROR in ch.qos.logback.classic.turbo.ReconfigureOnChangeFilter@716de067 - URL [jar:file:/C:/Local...cut.../WEB-INF/lib/My.Dev.jar!/logback-test.xml] is not of type file

その結果、INFO行が67(!)個増えました。

'scan = "true"'属性を削除すると、ログバックログが完全に消えました。

2
xtian

ほとんどの場合、logback.xmlで要素が構成されています。ログフレームワーク自体の状態に関するコンソールの更新が必要ない場合は、削除できます。ただし、logbackフレームワークでは、トラブルシューティングのために無効にすることをお勧めします。

ステータスメッセージをプライベートリストとして保持するStatusListenerAsListと呼ばれるコンソールリスナーに代わるものがあります。必要に応じて、わずかなコードでJMXを介して公開できます。

1
baja

Logback 1.0.2で追加されたデフォルトのヘッダーメッセージに関する情報を追加したいだけです。

#logback.classic pattern: %d [%thread] %-5level %logger{36} - %msg%n

logback news で見つけましたが、見つけるのは本当に困難でした。

このメッセージを削除する場合は、outputPatternAsPresentationHeaderをfalseに設定する必要があります。

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d %-5level [%thread] %logger{0}: %msg%n</pattern>
        <!-- do not print pattern as a header -->
        <outputPatternAsPresentationHeader>false</outputPatternAsPresentationHeader>
    </encoder>
</appender>
1
Betlista
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
</configuration>

NopStatusLinstenerクラスを単純に使用すると、ログバックの自己ロギングが停止します。

1
Rupesh Kumar