Jakie jest znaczenie właściwości log4j.rootLogger w pliku log4j.properties? Co się stanie, jeśli nie skorzystam z tej właściwości?

86

Jakie jest znaczenie log4j.rootLoggermajątku w log4j.propertiesaktach? Co się stanie, jeśli nie skorzystam z tej właściwości?

Przykład :

# 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

Co się stanie, jeśli ustawię tę właściwość na ERRORtryb.

Jitendra
źródło

Odpowiedzi:

94

Samudra Gupta wyjaśnia w swojej książce 1 :

LoggerObiekt jest głównym obiektem, który deweloper aplikacja używa do logowania żadnej wiadomości. Te Loggerobiekty działające w konkretnym przypadku wniosku przestrzegać hierarchii rodzic-dziecko .

Jeśli masz następującą konfigurację:

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

Oto jak mogłaby wyglądać hierarchia rejestratorów: 2

Drzewo

Samudra Gupta nadal wyjaśnia:

Na szczycie hierarchii znajduje się główny program rejestrujący. Główny program rejestrujący istnieje poza zakresem jakiejkolwiek niestandardowej hierarchii programu rejestrującego, którą możemy wymyślić. Zawsze istnieje jako główny program rejestrujący dla wszystkich możliwych hierarchii programów rejestrujących i nie ma przestrzeni nazw. Wszystkie inne Loggerobiekty specyficzne dla aplikacji są obiektami podrzędnymi głównego programu rejestrującego. Relacja nadrzędny-podrzędny rejestratorów oznacza zależność rejestratorów działających w ramach tej samej aplikacji. Podrzędny program rejestrujący może dziedziczyć właściwości ze swojego nadrzędnego programu rejestrującego rekurencyjnie w górę drzewa. Zwykle podrzędny program rejestrujący dziedziczy następujące właściwości ze swoich nadrzędnych programów rejestrujących:

  • Level: Jeśli podrzędny program rejestrujący nie ma określonego wyraźnego poziomu drzewa, użyje poziomu swojego najbliższego rodzica lub pierwszego odpowiedniego poziomu, jaki znajdzie rekurencyjnie w hierarchii.
  • Appender: Jeśli nie ma programu dołączającego dołączonego do programu rejestrującego, program podrzędny używa programu dołączającego swojego najbliższego nadrzędnego programu rejestrującego lub pierwszego programu dołączającego, który znajdzie rekurencyjnie w górę drzewa.
  • ResourceBundle: ResourceBundlessą plikami właściwości wzorca klucz-wartość używanymi do lokalizacji komunikatów rejestrowania. Podrzędny program rejestrujący dziedziczy wszystkie ResourceBundleskojarzone z jego nadrzędnym programem rejestrującym.

UWAGI

1 Samudra Gupta, Pro Apache Log4j, wydanie drugie (Berkeley, CA: 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/ , Źródło 26 maja 2014.

Paul Vargas
źródło
1
+1 dla „Zawsze istnieje jako główny program rejestrujący dla wszystkich możliwych hierarchii programów rejestrujących i nie ma przestrzeni nazw”.
Azim,
2
Jaka jest odpowiedź na pytanie OP - „ Co się stanie, jeśli nie użyję tej właściwości? ”?
hagrawal
4
O rany ... spójrz na tło linku do strony Dominica. Absolutnie nieczytelne.
MasterJoe,
@ testerjoe2 - masz rację, chociaż jest to ładny obrazek, który sprawia, że ​​trudno go czytać - jak w starych czasach html, kiedy ludzie mieliby żółte tło z białym tekstem - sprawia, że ​​twoje oczy chcą krwawić!
JGlass
10

Odpowiedzieć

Co się stanie, jeśli nie skorzystam z tej właściwości?

Jeśli nie ustawisz rootLoggera na poziom i appender, otrzymasz ostrzeżenie.

Na przykład, jeśli pominiesz lub log4j.rootLogger=DEBUG, stdoutzakomentujesz wiersz , tj. Powiedzmy, że twój plik log4j.properties zawiera tylko rootlogger i żadnych dodatkowych loggerów, tutaj główny program rejestrujący jest komentowany:

#log4j.rootLogger=DEBUG, stdout

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

Otrzymasz coś podobnego do następującego wyniku:

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.

źródło
7

Właściwość log4j.rootLogger ustawia Level (tutaj DEBUG) i Appender (tutaj A1) dla głównego rejestratora. Nie jest to obowiązkowe. Rejestrator główny nie ma dołączonego domyślnego programu dołączającego i może istnieć bez niego. Zatem plik właściwości log4j może być bez ustawiania tej właściwości.

Rejestrator główny jest najwyższym programem rejestrującym w hierarchii log4j, podobnie jak klasa Object w Javie.

abhishek jotshi
źródło