Apa pentingnya properti log4j.rootLogger di file log4j.properties? Apa yang terjadi jika saya tidak menggunakan properti ini?

85

Apa pentingnya log4j.rootLoggerproperti dalam log4j.propertiesfile? Apa yang terjadi jika saya tidak menggunakan properti ini?

Contoh :

# 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

Apa yang terjadi jika saya menyetel properti ini ke ERRORmode.

Jitendra
sumber

Jawaban:

95

Samudra Gupta menjelaskan dalam bukunya 1 :

The Loggerobjek adalah objek utama yang pengembang aplikasi menggunakan login pesan apapun. The Loggerbenda bertindak dalam contoh khusus dari aplikasi mengikuti hirarki orangtua-anak .

Jika Anda memiliki konfigurasi berikut:

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

Beginilah tampilan hierarki logger: 2

Pohon

Samudra Gupta terus menjelaskan:

Di bagian atas hierarki ada root logger. Logger root berada di luar cakupan hierarki logger kustom yang mungkin kami hasilkan. Itu selalu ada sebagai root logger untuk semua kemungkinan hierarki logger, dan tidak memiliki namespace. Semua Loggerobjek khusus aplikasi lainnya adalah objek turunan ke logger root. Hubungan induk-anak dari para penebang menandakan ketergantungan para penebang yang bertindak dalam aplikasi yang sama. Logger anak dapat mewarisi properti dari logger induknya secara rekursif di atas pohon. Biasanya, logger anak akan mewarisi properti berikut dari logger induknya:

  • Level: Jika pencatat anak tidak memiliki tingkat pohon eksplisit yang ditentukan, ia akan menggunakan tingkat induk terdekatnya atau tingkat pertama yang tepat yang ditemukannya secara rekursif di atas hierarki.
  • Appender: Jika tidak ada appender yang dipasang ke logger, logger turunan menggunakan appender dari pencatat induk terdekatnya atau appender pertama yang ditemukannya secara rekursif di atas pohon.
  • ResourceBundle: ResourceBundlesadalah file properti pola nilai kunci yang digunakan untuk lokalisasi pencatatan pesan. Logger anak mewarisi apa pun yang ResourceBundleterkait dengan logger induknya.

CATATAN

1 Samudra Gupta, Pro Apache Log4j, Edisi Kedua (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/ , Diakses pada 26 Mei 2014.

Paul Vargas
sumber
1
+1 untuk "Itu selalu ada sebagai pencatat akar untuk semua kemungkinan hierarki pencatat, dan tidak memiliki ruang nama."
Azim
2
Apa jawaban untuk pertanyaan OP - " Apa yang terjadi jika saya tidak menggunakan properti ini? " ??
hagrawal
4
Astaga ... lihat latar belakang di tautan ke halaman Dominic. Benar-benar tidak terbaca.
MasterJoe
@ testerjoe2 - Anda benar, meskipun gambarnya cantik, hal itu membuatnya sulit untuk dibaca - seperti zaman html lama di mana orang akan memiliki latar belakang kuning dengan teks putih - membuat mata Anda ingin berdarah!
JGlass
12

Untuk menjawab

Apa yang terjadi jika saya tidak menggunakan properti ini?

Jika Anda tidak menyetel rootLogger ke level dan appender, Anda akan mendapatkan peringatan.

Misalnya, jika Anda menghilangkan atau mengomentari baris log4j.rootLogger=DEBUG, stdout, misalnya file log4j.properties Anda hanya berisi rootlogger dan tidak ada logger tambahan, di sini logger root sedang dikomentari:

#log4j.rootLogger=DEBUG, stdout

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

Anda akan mendapatkan output seperti berikut:

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.

sumber
7

log4j.rootLogger Properti menyetel Level (DEBUG di sini) dan Appender (A1 di sini) untuk root Logger. Ini tidak wajib. Root logger tidak memiliki appender default yang terpasang dan dapat ada tanpa appender. Jadi, file properti log4j Anda bisa jadi tanpa properti ini disetel.

Root logger adalah logger tertinggi dalam hierarki log4j yang mirip dengan kelas Object di Java.

abhishek jotshi
sumber