0

我正在运行从 WAR 文件启动的独立 Jenkins 服务器。Jenkins 宣传自己使用 java.util.logging 框架进行日志记录。我按如下方式启动它:

java -Djava.util.logging.config.file=mycustomlogging.properties -jar jenkins.war > jenkins.log

mycustomlogging.properties 包含以下内容:

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=WARNING
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

我期望的是所有日志都进入 jenkins.log 并且只记录警告消息及以上。

jenkins.log 的内容与预期的一样,但我还看到创建了一个文件 ~/java0.log,其中包含 INFO 及更高版本的 XML 格式的日志语句。

当我在 mycustomlogging.properties 中只指定一个 ConsoleHandler(而没有 FileHandler)时,为什么会创建 java0.log?

我的属性文件是否与默认系统“合并”,它(可能)配置了一个写入 ~/java0.log 的 FileHandler?我的期望是指定自定义属性文件将完全覆盖默认系统行为。

或者服务器代码是否可能被编写为忽略系统属性并“无论如何”只记录到 ~/java0.log ?

如果重要的话,我在使用 Java 7 的 OS X 10.10 上。

4

1 回答 1

0

当我在 mycustomlogging.properties 中只指定一个 ConsoleHandler(而没有 FileHandler)时,为什么会创建 java0.log?

可能从未找到您的属性文件,或者执行 LogManager.reset() 或 LogManager.readConfiguration(InputStream) 的代码抛出了配置。

我的属性文件是否与默认系统“合并”,它(可能)配置了一个写入 ~/java0.log 的 FileHandler?

无法使用默认 LogManager 进行合并。必须有直接创建和添加 FileHandler 的代码。

或者服务器代码是否可能被编写为忽略系统属性并“无论如何”只记录到 ~/java0.log ?

是的。LogManager.reset 将丢弃您的配置。

尝试配置一个Groovy Hook 脚本来调用 LogManager.reset(),然后安装你的 ConsoleHandler。这在Jenkins 日志记录 wiki中有描述。

于 2014-11-12T18:10:07.683 回答