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

时间:2018-02-28 17:11:55

标签: java.util.logging

我的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 )以编程方式设置以记录到他们自己的文件。

问题是,如图所示,日志条目只会进入 TripUpdate 级别 INFO 。但是,如果我注释掉该行

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

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

我做错了什么,如何在 INFO TripUpdate 在FINER上登录启动

1 个答案:

答案 0 :(得分: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并将其安装在文件处理程序上。