Каково значение свойства log4j.rootLogger в файле log4j.properties? Что произойдет, если я не буду использовать это свойство?

Каково значение свойства log4j.rootLogger в файле log4j.properties? Что произойдет, если я не буду использовать это свойство?

Пример:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

Что произойдет, если я установлю для этого свойства режим ERROR.


person Jitendra    schedule 26.05.2014    source источник


Ответы (3)


Самудра Гупта объясняет в своей книге1:

Объект Logger — это основной объект, который разработчик приложения использует для регистрации любого сообщения. Объекты Logger, действующие в конкретном экземпляре приложения, следуют иерархии родитель-потомок.

Если у вас следующая конфигурация:

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.logger.com.me.proj2=INFO

Вот как может выглядеть иерархия регистратора:2

Дерево

Самудра Гупта продолжает объяснять:

На вершине иерархии находится корневой регистратор. Корневой регистратор существует за пределами любой пользовательской иерархии регистраторов, которую мы можем придумать. Он всегда существует как корневой регистратор для всех возможных иерархий регистраторов и не имеет пространства имен. Все остальные объекты Logger, относящиеся к конкретному приложению, являются дочерними объектами для корневого регистратора. Родительско-дочерние отношения регистраторов означают зависимость регистраторов, действующих в одном и том же приложении. Дочерний регистратор может наследовать свойства своего родительского регистратора рекурсивно вверх по дереву. Как правило, дочерний регистратор наследует следующие свойства от родительского(ых) регистратора(ов):

  • Level: Если для дочернего регистратора не указан явный уровень дерева, он будет использовать уровень своего ближайшего родителя или первый правильный уровень, который он находит рекурсивно вверх по иерархии.
  • Appender: Если к регистратору не присоединено приложение, дочерний регистратор использует добавление своего ближайшего родительского регистратора или первое добавление, которое он находит рекурсивно вверх по дереву.
  • ResourceBundle: ResourceBundles — это файлы свойств шаблона ключ-значение, используемые для локализации сообщений журнала. Дочерний регистратор наследует все ResourceBundle, связанные с его родительским регистратором.

ПРИМЕЧАНИЯ

1 Самудра Гупта, Pro Apache Log4j, второе издание (Беркли, Калифорния: Apress, 2005), 24–25, ISBN13: 978-1-59059-499-5

2 Доминик Митчелл, Вход в систему Java, http://happygiraffe.net/blog/2008/09/03/logging-in-java/, дата обращения 26 мая 2014 г.

person Paul Vargas    schedule 26.05.2014
comment
+1 за Он всегда существует как корневой регистратор для всех возможных иерархий регистраторов и не имеет пространства имен. - person Azim; 17.07.2016
comment
Каков ответ на этот вопрос OP - Что произойдет, если я не использую это свойство? ?? - person hagrawal; 29.09.2016
comment
Боже... посмотри на фон ссылки на страницу Доминика. Абсолютно нечитаемо. - person MasterJoe; 13.07.2017
comment
@ testerjoe2 - вы правы, хотя это красивое изображение, но его трудно читать - как в старые дни html, когда у людей был желтый фон с белым текстом - от этого у вас хотеться кровить! - person JGlass; 28.09.2018

Отвечать

Что произойдет, если я не буду использовать это свойство?

Если вы не установите для rootLogger уровень и приложение, вы получите предупреждение.

Например, если вы пропустите или закомментируете строку log4j.rootLogger=DEBUG, stdout, то есть скажите, что ваш файл log4j.properties содержит только корневой регистратор и никаких дополнительных регистраторов, здесь корневой регистратор закомментирован:

#log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

Вы получите что-то вроде следующего вывода:

log4j:WARN No appenders could be found for logger (log4jtests.Log4jHelloWorld).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
person Community    schedule 08.02.2017

Свойство log4j.rootLogger устанавливает уровень (здесь DEBUG) и Appender (здесь A1) для корневого регистратора. Это не обязательно. Корневой регистратор не имеет прикрепленного по умолчанию приложения и может существовать без приложения. Таким образом, ваш файл свойств log4j может быть без установки этого свойства.

Корневой регистратор — это самый высокий регистратор в иерархии log4j, аналогичный классу Object в Java.

person abhishek jotshi    schedule 22.12.2016