Яке значення властивості 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 Домінік Мітчелл, Вхід на Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , Отримано 26 травня 2014 року.


1
+1 для "Він завжди існує як кореневий реєстратор для всіх можливих ієрархій реєстраторів, і він не має простору імен."
Азім

2
Яка відповідь на це питання ОП - " Що станеться, якщо я не використовую цю властивість? " ??
hagrawal

4
Боже ... подивіться на тло посилання на сторінку Домініка. Абсолютно нечитабельно.
MasterJoe

@ testerjoe2 - ти маєш рацію, хоча його гарне зображення робить його важким для читання - як, наприклад, старі HTML-дні, коли люди мали жовтий фон з білим текстом - твої очі хочуть кровоточити!
JGlass

10

Відповісти

Що станеться, якщо я не користуюся цією власністю?

Якщо ви не встановите для 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.

7

Властивість log4j.rootLogger встановлює рівень (DEBUG тут) і Appender (A1 тут) для кореневого реєстратора. Це не є обов’язковим. Кореневий реєстратор не має додатка за замовчуванням, і він може існувати без додатка. Отже, файл властивостей log4j може бути без цієї властивості.

Кореневий реєстратор - це найвищий реєстратор в ієрархії log4j, подібний до класу Object у Java.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.