Пользовательский файл свойств java.util.logging, приводящий к дублированию файлов журнала

Я использую автономный сервер Jenkins, запущенный из файла WAR. Дженкинс рекламирует себя как использующий инфраструктуру 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 и будут регистрироваться только сообщения WARNING и выше.

Содержимое jenkins.log такое же, как и ожидалось, но я также вижу созданный файл ~/java0.log, который содержит инструкции журнала в формате XML в INFO и выше.

Почему java0.log создается, когда я указываю только ConsoleHandler (и не FileHandler) в mycustomlogging.properties?

Является ли мой файл свойств "объединенным" с системным файлом по умолчанию, который (предположительно) настраивает запись FileHandler в ~/java0.log? Я ожидал, что указание файла пользовательских свойств полностью переопределит поведение системы по умолчанию.

Или, скорее всего, код сервера написан так, что он игнорирует системные свойства и просто записывает в ~/java0.log "несмотря ни на что"?

Если это имеет значение, я на OS X 10.10 с использованием Java 7.

1 ответ

Почему java0.log создается, когда я указываю только ConsoleHandler (и не FileHandler) в mycustomlogging.properties?

Возможно, ваш файл свойств не был найден или конфигурация была выброшена кодом, выполняющим LogManager.reset() или LogManager.readConfiguration(InputStream).

Мой файл свойств "объединен" с системным файлом по умолчанию, который (предположительно) настраивает запись FileHandler в ~/java0.log?

Слияние невозможно с LogManager по умолчанию. Должен быть код, который непосредственно создает и добавляет FileHandler.

Или, скорее всего, код сервера написан так, что он игнорирует системные свойства и просто записывает в ~/java0.log "несмотря ни на что"?

Да. LogManager.reset выкинет вашу конфигурацию.

Попробуйте настроить скрипт Groovy Hook для вызова LogManager.reset(), а затем установите ConsoleHandler. Это описано в вики-журнале Jenkins.

Другие вопросы по тегам