Java SLF4J层次执行

时间:2017-03-28 11:52:54

标签: java logging slf4j

有没有办法从特定的儿子执行层次结构中的每个日志?

例如:

-Parent
    -Son
       -Son2
  1. 执行Son.log(“message”)将执行Son log和Parent log。
  2. 执行Son2.log(“message”)将执行Son2,Son和父日志。
  3. 这就是代码:

    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.

    期望的输出:

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

    感谢。

1 个答案:

答案 0 :(得分:1)

这不是它的工作原理。 SLF4J Logger层次结构不能以您希望的方式使用(也不应该)。

基本上,对于每个记录器,如果您没有定义任何设置,则将从父级复制设置。在您的层次结构中,DEFAULT的日志记录级别设置为parent,并且没有为parent.son定义任何内容。因此,parent.son的日志记录级别也将为DEBUG。因此,DEBUG将记录级别高于或等于parent.son的所有日志。如果您为儿子设置日志级别为TRACE,那么这将优先于父级的DEBUG级别。