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

java.util.logging how to avoid turning off logging for a child level

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

现在,当我在 com.logtests 将日志级别设置为关闭时,它也会在 com.logtests.TestClass 关闭日志记录。因为我在较低级别设置了一个单独的处理程序,所以我期待 com.logtests.TestClass 的日志处理程序继续写入日志。

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

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

If the new level is null, it means that this node should inherit its level from its nearest ancestor with a specific (non-null) level value.

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

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

如果您在代码中设置关卡,那么操作顺序很重要。在子记录器设置为 ALL.

之前,父记录器必须设置为 OFF
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());
    }
}