了解java logger - 几乎完全相同的代码的不同输出

时间:2014-11-28 01:37:16

标签: java logging

第一段代码与第二段完全相同。但是Log记录的层次传播是不同的。有人可以解释为什么会发生这种情况。感谢

Logger log1 = Logger.getLogger("Test1");
        Logger log2 = Logger.getLogger("Test1.Test2");
        Logger log3 = Logger.getLogger("Test1.Test2.Test3");
        log2.setLevel(Level.WARNING);
        log3.setLevel(Level.INFO);
        log2.addHandler(new ConsoleHandler());
        log3.addHandler(new ConsoleHandler());
        log1.log(Level.INFO, "Message By: {0}",log1.getName());
        log2.log(Level.INFO, "Message By: {0}",log2.getName());
        log3.log(Level.INFO, "Message By: {0}",log3.getName());

OUTPUT: Nov 27, 2014 8:32:51 PM Test main
INFO: Message By: Test1
Nov 27, 2014 8:32:51 PM Test main
INFO: Message By: Test1.Test2.Test3
Nov 27, 2014 8:32:51 PM Test main
INFO: Message By: Test1.Test2.Test3
Nov 27, 2014 8:32:51 PM Test main
INFO: Message By: Test1.Test2.Test3

Logger logger      = Logger.getLogger("d");
        Logger logger1     = Logger.getLogger("d.1");
        Logger logger1_2   = Logger.getLogger("d.1.2");
        logger1  .setLevel(Level.WARNING);
        logger1_2.setLevel(Level.INFO);
        logger     .info("msg:");
        logger1    .info("msg: 1");
        logger1_2  .info("msg: 1.2");
OUTPUT:
Nov 27, 2014 8:33:34 PM Test main
INFO: msg:
Nov 27, 2014 8:33:34 PM Test main
INFO: msg: 1.2

1 个答案:

答案 0 :(得分:0)

  

最低记录器INFO消息不应传播到顶部,因为中间记录器设置为警告

这种假设是你困惑的根源。在java.util.logging.Logger类文档中记录了适当的记录。根据文件:

  

默认情况下,记录器还会以递归方式向上发布到其父级处理程序。

子记录器直接记录到父处理程序而不是父记录程序。因此,在这种情况下,父处理程序的级别不是父级记录器的级别。