java.util.logging如何避免关闭子级别的日志记录

时间:2016-02-21 05:25:51

标签: java java.util.logging

我在包TestClass中有一个班级com.logtests。我为TestClass附加了一个日志处理程序,并为com.logtests.TestClass将日志级别设置为ALL。我也有com.logtests级别的处理程序。这很好。

现在,当我在com.logtests将日志级别设置为OFF时,它也会关闭com.logtests.TestClass的日志记录。由于我在较低级别设置了单独的处理程序,因此我希望com.logtests.TestClass处的日志处理程序继续写入日志。

所以我的问题是:即使关闭父级别的日志记录,如何确保较低级别的类继续记录?

1 个答案:

答案 0 :(得分:0)

来自java.util.logging.Logger.setLevel文档:

  

如果新级别为null,则表示此节点应从具有特定(非空)级别值的最近祖先继承其级别。

如果您为子记录器声明了一个确切的级别,那么它将不会从父记录器继承该级别。

com.logtests.level=OFF
com.logtests.TestClass.level=ALL

如果您在代码中设置级别,则操作顺序很重要。在将子记录器设置为OFF之前,必须将父记录器设置为ALL

public class EffectiveLevel {

    private static final Logger PARENT = Logger.getLogger("com.logtests");
    private static final Logger CHILD = Logger.getLogger("com.logtests.TestClass");

    public static void main(String[] args) {
        PARENT.setLevel(Level.OFF);
        CHILD.setLevel(Level.ALL);
        System.out.println(PARENT.getName() + " " + PARENT.getLevel());
        System.out.println(CHILD.getName() + " " + CHILD.getLevel());
    }
}