ความสำคัญของคุณสมบัติ log4j.rootLogger ในไฟล์ log4j.properties คืออะไร? จะเกิดอะไรขึ้นถ้าฉันไม่ใช้คุณสมบัตินี้?


85

ความสำคัญของ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โหมด

คำตอบ:


95

Samudra Gupta อธิบายในหนังสือเล่ม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

ต้นไม้

Samudra Gupta อธิบายต่อไป:

ที่ด้านบนสุดของลำดับชั้นมีเครื่องบันทึกราก คนตัดไม้รากอยู่นอกขอบเขตของลำดับชั้นของคนตัดไม้แบบกำหนดเองใด ๆ ที่เราอาจสร้างขึ้น มันมักจะมีอยู่เป็น root logger สำหรับลำดับชั้นของคนตัดไม้ที่เป็นไปได้ทั้งหมดและไม่มีเนมสเปซ Loggerอ็อบเจ็กต์เฉพาะแอ็พพลิเคชันอื่น ๆ ทั้งหมดเป็นอ็อบเจ็กต์ลูกของ root logger ความสัมพันธ์แม่ลูกของคนตัดไม้บ่งบอกถึงการพึ่งพาของคนตัดไม้ที่ทำหน้าที่ภายในแอปพลิเคชันเดียวกัน คนตัดไม้ลูกสามารถสืบทอดคุณสมบัติจากคนตัดไม้แม่ของมันขึ้นต้นไม้ซ้ำได้ โดยปกติแล้วคนตัดไม้ลูกจะสืบทอดคุณสมบัติต่อไปนี้จากคนตัดไม้แม่:

  • Level: ถ้าคนตัดไม้เด็กไม่ได้ระบุระดับต้นไม้ที่ชัดเจนจะใช้ระดับแม่ที่ใกล้เคียงที่สุดหรือระดับแรกที่เหมาะสมที่พบในลำดับชั้นแบบวนซ้ำ
  • Appender: หากไม่มี appender ติดอยู่กับคนตัดไม้เครื่องตัดไม้ลูกจะใช้ appender ของคนตัดไม้แม่ที่ใกล้เคียงที่สุดหรือ appender แรกที่พบในต้นไม้ซ้ำ
  • ResourceBundle: ResourceBundlesเป็นไฟล์คุณสมบัติรูปแบบคีย์ - ค่าที่ใช้สำหรับการแปลข้อความการบันทึก คนตัดไม้เด็กสืบทอดสิ่งที่ResourceBundleเกี่ยวข้องกับคนตัดไม้แม่

หมายเหตุ

1 Samudra Gupta, Pro Apache Log4j, Second Edition (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/ , สืบค้นเมื่อ 26 May 2014


1
+1 สำหรับ "มันมักจะมีเป็น root logger สำหรับลำดับชั้นของคนตัดไม้ที่เป็นไปได้ทั้งหมดและไม่มีเนมสเปซ"
Azim

2
คำตอบสำหรับคำถามของ OP - " จะเกิดอะไรขึ้นถ้าฉันไม่ใช้คุณสมบัตินี้ " ??
hagrawal

4
เอ้ย ... ดูเบื้องหลังในลิงค์ไปยังเพจของ Dominic อ่านไม่ออกอย่างแน่นอน
MasterJoe

@ testerjoe2 - คุณพูดถูกในขณะที่ภาพสวย ๆ มันทำให้อ่านยากเหมือนสมัย ​​html สมัยก่อนที่ผู้คนจะมีพื้นหลังสีเหลืองพร้อมข้อความสีขาวทำให้ตาของคุณอยากเลือดออก!
JGlass

12

เพื่อตอบ

จะเกิดอะไรขึ้นถ้าฉันไม่ใช้คุณสมบัตินี้?

หากคุณไม่ได้ตั้งค่า rootLogger เป็นระดับและ appender คุณจะได้รับคำเตือน

ตัวอย่างเช่นหากคุณละเว้นหรือแสดงความคิดเห็นในบรรทัด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 ที่นี่) สำหรับ root Logger สิ่งนี้ไม่บังคับ Root logger ไม่มี appender เริ่มต้นที่แนบมาและสามารถอยู่ได้โดยไม่ต้องมี appender ดังนั้นไฟล์คุณสมบัติ log4j ของคุณสามารถอยู่ได้โดยไม่ต้องตั้งค่าคุณสมบัตินี้

Root logger เป็นตัวบันทึกที่สูงที่สุดในลำดับชั้น log4j ซึ่งคล้ายกับคลาส Object ใน Java

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.