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());
}
}
我有 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());
}
}