2017-06-15 18 views
0

私はlog4j2を使ってプロジェクトのログをいくつか行っています。私の設定のMy Loggersセクションは次のようになります。log4jを使用して外部ライブラリからのログメッセージを抑制する方法

<Loggers> 

    <!-- default logger --> 
    <Root level="info"> 
     <AppenderRef ref="Console"/> 
    </Root> 

    <!-- only log warn/error/fatal for external libs --> 
    <Logger name="org.cfg4j" level="warn" additivity="false"> 
     <AppenderRef ref="Console"></AppenderRef> 
    </Logger> 
    <Logger name="io.netty.util" level="warn" additivity="false"> 
     <AppenderRef ref="Console"></AppenderRef> 
    </Logger> 

</Loggers> 

これは私の知る限り、「io.netty.utilログ」をGoogleで検索してthisを思い付いたio.netty.util

からDEBUGレベルのメッセージをsupressingとして任意の効果を持つことしていないようです。デフォルトロガーを無効にする方法があるようです。

public abstract class InternalLoggerFactory { 
private static volatile InternalLoggerFactory defaultFactory; 

static { 
    final String name = InternalLoggerFactory.class.getName(); 
    InternalLoggerFactory f; 
    try { 
     f = new Slf4JLoggerFactory(true); 
     f.newInstance(name).debug("Using SLF4J as the default logging framework"); 
     defaultFactory = f; 
    } catch (Throwable t1) { 
     try { 
      f = new Log4JLoggerFactory(); 
      f.newInstance(name).debug("Using Log4J as the default logging framework"); 
     } catch (Throwable t2) { 
      f = new JdkLoggerFactory(); 
      f.newInstance(name).debug("Using java.util.logging as the default logging framework"); 
     } 
    } 

    defaultFactory = f; 
} 

私はこれを行ってみましたが、いくつかの問題がありました。私のIDE(intellij)は、Log4JLoggerFactoryが推奨されていないことを教えてくれました。私は処理を進めましたが、インスタンスに「newInstance」というメソッドが含まれていないことがわかりました。

これを進める方法について少し混乱しています。 log4jが私の考え方で外部ライブラリのDEBUG/INFOレベルメッセージを抑制する方法はありますか?

答えて

1

ロガーは、log4jの1.xのAPI(解答のオリジナルバージョン)で定義されている場合:

問題はlog4jの1.xのAPIはlog4j2プロパティを使用しないことです。

log4j-1.2-api.jarをlog4j 1.xブリッジとして追加すると、問題を解決するはずです。

しかし、NettyのデフォルトloggerfactoryはSlf4JLoggerFactoryですので、実際に必要なのはslf4jブリッジです。 slf4j-log4j12からlog4j 1.xへ、log4j-slf4j-implからlog4j2.xへ。

+0

"org.apache.logging.log4j:log4j-1.2-api:+" これを私のgradleビルドファイルに入れます。これは正しいか? – Zack

+0

外部のlib(ブリッジ)が実際に私のクラスパスにあるように見えますが、私はまだ外部ライブラリに関連するログ出力をたくさん取得しています – Zack

+0

[this](https://logging.apache.org/ log4j/log4j-2.2/log4j-1.2-api/index.html)、1.0ディストリビューションのすべてのインスタンスをブリッジに置き換える必要があります。私はそれぞれの外部のlibにダイビングする必要がありますか? – Zack

関連する問題