2 回答

TA贡献1775条经验 获得超8个赞
不应该为根 Logger 设置级别也为根 Logger 的所有子记录器设置级别吗?
不,显然您正在创建一个新的 Logger 对象。getLogger 的 Javadoc状态:
如果创建了一个新的记录器,它的日志级别将基于 LogManager 配置进行配置,并且它还将配置为将日志输出发送到其父处理程序。
请注意,即使之前有一个同名的 Logger 对象,您也不能依赖getLogger返回相同的对象,因为如果没有对该对象的强引用,它可能已被垃圾回收。
如果您的目标是在项目中创建具有相同日志级别的所有 Logger 对象,则不应以编程方式进行,而应通过配置进行。这就是java.util.logging派上用场的地方。总体优势是您可以在不同的日志级别运行应用程序,甚至无需更改一行代码。
只需编辑您的配置文件(本质上就是上面提到的LogManager configuration)。它被调用logging.properties并位于您的 JRE 目录中。在那里您可以编辑最后一段并配置项目范围或类缩小的日志级别:
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
myProject.MyClass.level = FINE
myProject.MyOtherNotSoImportantClass.level = INFO
mySecondProject.MainClass.level = NONE
一个更好的解决方案是复制logging.properties到您的项目目录并调用您的应用程序
java -Djava.util.logging.config.file=./src/test/resources/logging.properties

TA贡献1775条经验 获得超11个赞
接受的答案是完全有效的,我完全同意。
也就是说,我想补充一点知识……随心所欲。
private static final Logger JAVA_LOG = Logger.getLogger(MyClass.class.getName());
static { JAVA_LOG.setLevel(null); }
这将告诉它继承其祖先日志级别。Logger.setLevel() javadoc
如果新级别为空,则意味着此节点应从其最近的祖先处继承其级别,并具有特定的(非空)级别值。
添加回答
举报