コンソールへのすべての出力(標準出力)を抑制するように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で実行されています。
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 ソースコードリポジトリ に統合し、次のリリースに含めることを願っています。
これらのメッセージは、次の少なくとも1つが当てはまる場合にのみ表示されます。
問題を修正すると、それらのメッセージは消えます。
これは「私も」答えです、ごめんなさい!
幸いなことに、私は以下の解決策を見つけました(更新を参照)。
他のいくつかの答えとは反対に、構成フェーズにINFO
sまたはERROR
sがないにもかかわらず、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
変数でロガーを初期化することです。代わりにインスタンス変数の使用を推奨しています。
バージョン:
[〜#〜] update [〜#〜]
最後に、問題が何であるかがわかりました!
細かいマニュアル (および Thorbjørnの答え )から:
要素内でデバッグ属性を設定すると、次の仮定の下でステータス情報が出力されます
- 構成ファイルが見つかりました
- 構成ファイルは整形式のXMLです。
私の間違いは
<configuration debug="true" scan="true">
振り返ってみると、duh !この情報が他の人に役立つことを願っています。
だから私は同じ問題を抱えていたが、誤った<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 についてブログに書いた
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
}
}
(このコードはテストされていません)
実際、同じlogback.xmlの場所が複数回報告されるという事実は、他の何よりもlogbackのバグのようです。これをログバックJIRAに報告する( here )か、最初に問題のjarがクラスパスに複数回存在するかどうかを確認します。
私の場合、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"'属性を削除すると、ログバックログが完全に消えました。
ほとんどの場合、logback.xmlで要素が構成されています。ログフレームワーク自体の状態に関するコンソールの更新が必要ない場合は、削除できます。ただし、logbackフレームワークでは、トラブルシューティングのために無効にすることをお勧めします。
ステータスメッセージをプライベートリストとして保持するStatusListenerAsListと呼ばれるコンソールリスナーに代わるものがあります。必要に応じて、わずかなコードでJMXを介して公開できます。
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>
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
</configuration>
NopStatusLinstenerクラスを単純に使用すると、ログバックの自己ロギングが停止します。