Java Util Logging File Configuration Conundrum



My 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

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

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

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

然后TripUpdate日志按配置在Finer上,但日志条目也会进入Finer启动日志,而不是INFO

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

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

.level=INFO

所有子记录器都将继承此级别。

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

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

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

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

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

否则,您只需编写一个日志过滤器来检查记录器名称和级别并将其安装在文件处理程序上。

最新更新