2017-03-28 16 views
0

特定の息子から階層内のすべてのログを実行する方法はありますか?例えばJava SLF4J hierachy execution

Son.log( "メッセージ")を実行

-Parent 
    -Son 
     -Son2 
  1. はソン・ログと親ログを実行することになります。
  2. Son2.log( "message")を実行すると、Son2、Son、および親ログが実行されます。おかげ

    14:15:25.180 [main] DEBUG parent.son- Hello world. 14:15:25.180 [main] DEBUG parent- Hello world.

    public class HelloWorld { 
    
        public static void main(String[] args) { 
    
         Logger parent = LoggerFactory.getLogger("parent"); 
         ((ch.qos.logback.classic.Logger) parent).setLevel(Level.DEBUG); 
    
         Logger son= LoggerFactory.getLogger("parent.son"); 
         son.debug("hello"); 
        } 
    } 
    

    出力:

    14:15:25.180 [main] DEBUG logger.son- Hello world.

    所望の出力コードです

+0

階層内のすべてのログを実行するとどういう意味ですか? – sinu

+0

私は、son1のメソッドログを実行すると、son1.log()とparent.log()が強制的に実行されることを意味します。これは、親がson1 hierachyにあるためです。 – Lechucico

答えて

1

これは動作しません。 SLF4J Logger階層は、あなたが望むように使用することはできません。

基本的に、各ロガーについて、設定を定義しないと、設定は親からコピーされます。階層では、ログレベルはparentの場合はDEFAULTに設定され、parent.sonの場合は何も定義されていません。したがって、parent.sonのログレベルはDEBUGになります。したがって、レベルがDEBUG以上のすべてのログはparent.sonに記録されます。息子のログレベルをTRACEに設定すると、親のDEBUGレベルより優先されます。

+0

それから、親からの設定だけをコピーして他のものを実行できない場合、その階段の利点は何か分かりません。 – Lechucico

+0

同じログメッセージを何度も何度も繰り返してもらいたいのですが? – sinu

+0

私はそれを誤解しました、私は申し訳ありません。息子が親アペンダーを継承する場合、それは「親ロガー機能の実行」のようなものです。ありがとう。 – Lechucico