什么是配置 `java.util.logging` 的最简单方法?

4

我有一个由第三方开发的大型复杂应用程序,其中包含 java.util.logging.Logger#finer() 调用。

通常我使用log4j和sl4j来记录日志,我并不太了解java.util.logging,更不知道所有的配置细节和可能性。

每一次谷歌关于 "java.util.logging" 的搜索都会指向完整的关于流处理器、格式化器、级别的解释。每个人都认为我真的很在乎这些东西(实际上这是个合理的假设)。但我根本不关心。

我并不是真正对将日志分离到不同文件、文件轮换、压缩、电子邮件、远程日志等感兴趣。我也不关心日志级别和消息格式化的技巧。

我想做的就是运行此应用程序,并将所有可用的日志消息输出到标准输出。

是否有一种简单直接的方法来实现这一点?

类似于jvmargs -Djava.util.logging.level=FINEST -Djava.util.logging.to=stdout。 或者是一些简单的文件放在类路径的某个位置?


2
你可能想要安装一个JUL到SLF4J的桥接器,请参见https://dev59.com/G2ox5IYBdhLWcg3wk1Ig - Progman
JUL确实使用属性文件,但我同意,添加桥接器会更好。不过,那样的话源代码仍需要更改以实际使用slf4j类,我认为。 - OneCricketeer
我没有源代码,所以任何建议更改它都是不可行的。如果我有这个可能性,我会将所有内容更改为System.out.println - rslemos
我简直不敢相信最简单的方法是将另一个库添加到类路径中(也许还要进行配置)。但是...好吧...我会尝试一下的。 - rslemos
你应该编写自己的配置文件,并告诉 LogManager 使用它。 - user207421
1个回答

2
我想做的就是运行此应用程序并将所有可用的日志消息输出到标准输出(stdout)。 不要在生产环境中这样做,但这是快速、简单、hacky的方法: 编辑位于java/conf下的logging.properties文件。例如:/usr/lib/jvm/default-java/conf/logging.properties
该文件设置了将ConsoleHandler附加到根记录器,这正是您想要的。 您只需要调整级别以查看输出。 这是全局更改,请注意。
编辑该文件:
- 将.level = INFO -> .level = ALL - 将java.util.logging.ConsoleHandler.level = INFO更改为java.util.logging.ConsoleHandler.level = ALL - 保存更改并重新启动应用程序。 推荐的方法: 大多数JVM不在您的控制范围内(生产/开发服务器),因此可以将该文件复制到您拥有的位置,并使用java.util.logging.config.file系统属性。
例如:-Djava.util.logging.config.file=/home/myuser/myapp/logging.properties
这样,您可以自由地进行对程序本身而非机器全局的更改。

1
你不应该编辑Java配置。你应该编写自己的配置文件,并告诉LogManager使用它。 - user207421
当然。不过我认为这里的上下文很重要。OP只是想要一些简单快捷的东西。我可以在答案中加上免责声明。 - jmehrens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接