Какво е значението на свойството 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

Дърво

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

В горната част на йерархията съществува root регистратор. Основният регистратор съществува извън обхвата на всяка персонализирана йерархия на регистратор, която можем да измислим. Той винаги съществува като основен регистратор за всички възможни йерархии на регистратори и няма пространство от имена. Всички останали специфични за приложението Logger обекти са дъщерни обекти на root регистратора. Връзката родител-дете на регистраторите означава зависимостта на регистраторите, действащи в рамките на едно и също приложение. Дъщерен регистратор може да наследи свойства от своя родителски регистратор рекурсивно нагоре в дървото. Обикновено дъщерният регистратор ще наследи следните свойства от родителския(те) регистратор(и):

  • Level: Ако дъщерният регистратор няма изрично указано ниво на дърво, той ще използва нивото на най-близкия си родител или първото подходящо ниво, което намери рекурсивно нагоре в йерархията.
  • Appender: Ако към регистратор няма прикачен appender, дъщерният регистратор използва appender на своя най-близък родителски регистратор или първия 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 на ниво и appender, ще получите предупреждение.

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

#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 тук) за root Logger. Това не е задължително. Root logger няма прикачен добавъчен модул по подразбиране и може да съществува без добавъчен модул. Така че вашият файл със свойства на log4j може да бъде без това свойство да е зададено.

Основният регистратор е най-високият регистратор в йерархията на log4j, подобно на класа Object в Java.

person abhishek jotshi    schedule 22.12.2016