56

コンソールへのすべての出力 (標準出力) を抑制するように 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 で実行されています。

4

10 に答える 10

43

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

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

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

于 2010-08-03T22:26:20.667 に答える
16

クラスパス エントリの重複メッセージは、Logback がクラスパス エントリをカウントする方法のバグの兆候であるというHolger Hoffstätte の診断は正しかった。Robert Elliotは、Logbackユーザー メーリング リストのスレッドでも問題を取り上げました。SLF4J メーリング リストでのこの関連討論のRobert と他の人によると、Logback を使用するアプリケーションが WebLogic コンテナで実行されると、WebLogic クラスローダの動作方法が原因で、Logback はlogback.xml構成ファイル。ただし、WebLogic クラスローダが一意のクラスパス エントリのみを報告する必要があるかどうかに関係なく、Logback は一意のクラスパス エントリのみをカウントして、この紛らわしい誤ったメッセージを出力しないようにする必要があります。

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

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

于 2010-08-05T00:56:16.297 に答える
15

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

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

他のいくつかの回答とは対照的に、構成フェーズにs またはsINFOがないにもかかわらず、LogBack 構成メッセージのストリームを取得しています。ERRORWARN

ここに私のメッセージがあります:

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 アプリでの実行

アップデート

最後に、問題が何であるかを突き止めました!

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

要素内に debug 属性を設定すると、ステータス情報が出力されます。

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

私の間違いは

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

振り返ってみると、当たり前!うまくいけば、この情報は他の人に役立ちます。

于 2011-10-12T12:00:09.380 に答える
8

だから私は同じ問題を抱えていましたが、0.9.4前後で廃止された誤った <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>

私が変更した内容のより完全な説明についてブログを書いたことがあります。

于 2010-09-28T12:32:20.203 に答える
2

私の場合、依存プロジェクトに「logback-test.xml」があり、webapp jar としてデプロイされていました。で始まる「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"」属性を削除することで、logback ログが完全に消えました。

于 2012-05-08T09:21:47.727 に答える
2

私はログバックに慣れていません。ただし、またはに出力する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
    }
}

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

于 2010-08-03T22:02:14.400 に答える
2

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

于 2010-08-04T10:34:00.637 に答える
1

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

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

logback newsで見つけたのですが、見つけるのが本当に大変でした。

このメッセージを削除したい場合は、outputPatternAsPresentationHeaderfalse に設定する必要があります:

<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>
于 2012-05-02T12:21:46.403 に答える
1

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

ステータス メッセージをプライベート リストとして保持する StatusListenerAsList と呼ばれるコンソール リスナーの代替手段があります。必要に応じて、少しのコードを使用して、JMX 経由で公開できます。

于 2011-12-06T02:15:06.417 に答える