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

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

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

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

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

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


person jph    schedule 11.11.2014    source источник


Ответы (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.

person jmehrens    schedule 12.11.2014