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

86

Какое значение имеет 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режим.

Джитендра
источник

Ответы:

94

Самудра Гупта объясняет в своей книге 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 Dominic Mitchell, Logging in Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , дата обращения 26 мая 2014 г.

Пол Варгас
источник
1
+1 за «Он всегда существует как корневой регистратор для всех возможных иерархий регистратора и не имеет пространства имен».
Azim
2
Каков ответ на вопрос OP - « Что будет, если я не воспользуюсь этим свойством? » ??
hagrawal
4
Гоша ... посмотри на фон ссылки на страницу Доминика. Совершенно нечитаемый.
MasterJoe
@ testerjoe2 - вы правы, хотя это красивое изображение, его трудно читать - как в старые времена HTML, когда у людей был желтый фон с белым текстом - заставляет ваши глаза кровоточить!
JGlass
10

Отвечать

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

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

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

#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.

источник
7

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

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

абхишек джотши
источник