Java Util日志记录文件配置难题

问题描述 投票:0回答:1

我的log.properties包含配置

java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.pattern = logs/startup.%g.log
java.util.logging.FileHandler.limit = 10000000
java.util.logging.FileHandler.count = 3

GtfsOperatorManager.level=INFO
TripUpdate.level=FINER
VehiclePosition.level=INFO
Alert.level=INFO

根记录器记录到名为startup的文件,其他记录器(如TripUpdate)以编程方式设置为记录到自己的文件。

问题是,如图所示,日志条目仅进入级别INFO的TripUpdate。但是,如果我注释掉这条线

#java.util.logging.FileHandler.level = INFO

然后TripUpdate按照配置登录FINER,但日志条目也会进入FINER的启动日志而不是INFO。

我做错了什么,如何在INFO上获取启动日志,在FINER上登录TripUpdate?

java.util.logging
1个回答
0
投票

尝试通过添加以下内容在配置文件中设置根记录器级别:

.level=INFO

所有儿童伐木工将inherit this level

但是,如果我注释掉[snip]行,那么TripUpdate会按照配置登录FINER,但是日志条目也会进入FINER的启动日志而不是INFO。

这是因为默认的java.util.logging.FileHandler.levelALL

由于您也在进行编程配置,因此您需要确保保持记录器不被垃圾回收。

没有记录不是直接进行上面的启动,而是它继承了日志条目,但我想过滤掉INFO之上的所有内容

你在那里的选择有限。您可以在不希望看到输出的记录器上使用setUseParentHandlers。这可以通过设置<loggername>.useParentHandlers=false从属性文件中完成。然后,您可以将其他文件处理程序附加到不再向父处理程序发布记录的记录器。

否则,你必须写一个log filter来检查logger namelevel并将其安装在文件处理程序上。

© www.soinside.com 2019 - 2024. All rights reserved.