Пользовательский файл свойств 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.