Ý nghĩa của thuộc tính log4j.rootLogger trong tệp log4j.properties là gì? Điều gì xảy ra nếu tôi không sử dụng tài sản này?


86

Tầm quan trọng của log4j.rootLoggertài sản trong log4j.propertieshồ sơ là gì? Điều gì xảy ra nếu tôi không sử dụng tài sản này?

Ví dụ :

# 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

Điều gì xảy ra nếu tôi đặt thuộc tính này ở ERRORchế độ.

Câu trả lời:


94

Samudra Gupta giải thích trong cuốn sách 1 của mình :

Đối Loggertượng là đối tượng chính mà nhà phát triển ứng dụng sử dụng để ghi bất kỳ thông báo nào. Các Loggerđối tượng hoạt động trong một phiên bản cụ thể của ứng dụng tuân theo thứ bậc cha-con .

Nếu bạn có cấu hình sau:

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

Đây là cách hệ thống phân cấp của trình ghi nhật ký có thể kết thúc như sau: 2

Cây

Samudra Gupta tiếp tục giải thích:

Ở trên cùng của hệ thống phân cấp tồn tại một trình ghi gốc. Trình ghi gốc tồn tại bên ngoài phạm vi của bất kỳ phân cấp trình ghi nhật ký tùy chỉnh nào mà chúng tôi có thể đưa ra. Nó luôn tồn tại dưới dạng trình ghi gốc cho tất cả các cấu trúc phân cấp có thể có của trình ghi nhật ký và nó không có không gian tên. Tất cả các Loggerđối tượng dành riêng cho ứng dụng khác là các đối tượng con của bộ ghi gốc. Mối quan hệ cha-con của các trình ghi nhật ký biểu thị sự phụ thuộc của các trình ghi nhật ký hoạt động trong cùng một ứng dụng. Một trình ghi con có thể kế thừa các thuộc tính từ trình ghi cha của nó một cách đệ quy lên cây. Thông thường, một trình ghi con sẽ kế thừa các thuộc tính sau từ (các) trình ghi mẹ của nó:

  • Level: Nếu trình ghi con không có cấp độ cây rõ ràng được chỉ định, nó sẽ sử dụng cấp độ của cấp độ gốc gần nhất hoặc cấp độ thích hợp đầu tiên mà nó tìm thấy đệ quy lên hệ thống phân cấp.
  • Appender: Nếu không có appender nào được gắn vào một trình ghi, trình ghi con sử dụng appender của trình ghi mẹ gần nhất của nó hoặc appender đầu tiên mà nó tìm thấy một cách đệ quy lên cây.
  • ResourceBundle: ResourceBundleslà các tệp thuộc tính mẫu khóa-giá trị được sử dụng để bản địa hóa thông báo ghi nhật ký. Trình ghi con kế thừa bất kỳ ResourceBundleliên kết nào với trình ghi mẹ của nó.

LƯU Ý

1 Samudra Gupta, Pro Apache Log4j, Phiên bản thứ hai (Berkeley, CA: Apress, 2005), 24-25, ISBN13: 978-1-59059-499-5

2 Dominic Mitchell, Đăng nhập bằng Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , Truy cập ngày 26 tháng 5 năm 2014.


1
+1 cho "Nó luôn tồn tại dưới dạng trình ghi gốc cho tất cả các cấu trúc phân cấp có thể có của trình ghi nhật ký và nó không có không gian tên."
Azim

2
Câu trả lời cho câu hỏi này của OP là - " Điều gì xảy ra nếu tôi không sử dụng thuộc tính này? " ??
hagrawal

4
Chúa ơi ... hãy nhìn vào hình nền trên liên kết đến trang của Dominic. Hoàn toàn không thể đọc được.
MasterJoe

@ testerjoe2 - bạn nói đúng, mặc dù hình ảnh đẹp nhưng nó lại khiến bạn khó đọc - giống như những ngày html cũ, nơi mọi người sẽ có nền màu vàng với văn bản màu trắng - khiến mắt bạn muốn chảy máu!
JGlass

10

Để trả lời

Điều gì xảy ra nếu tôi không sử dụng tài sản này?

Nếu bạn không đặt rootLogger thành một cấp và một appender, bạn sẽ nhận được cảnh báo.

Ví dụ: nếu bạn bỏ qua hoặc nhận xét ngoài dòng log4j.rootLogger=DEBUG, stdout, nghĩa là tệp log4j.properties của bạn chỉ chứa rootlogger và không có trình ghi nào bổ sung, thì ở đây root logger được nhận xét:

#log4j.rootLogger=DEBUG, stdout

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

Bạn sẽ nhận được một cái gì đó giống như đầu ra sau:

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

Thuộc tính log4j.rootLogger đặt Cấp (GỠ LỖI tại đây) và Appender (A1 tại đây) cho Trình ghi gốc. Điều này không bắt buộc. Root logger không có appender mặc định đính kèm và nó có thể tồn tại mà không có appender. Vì vậy, tệp thuộc tính log4j của bạn có thể không có thuộc tính này được đặt.

Root logger là trình ghi cao nhất trong phân cấp log4j tương tự như lớp Object trong Java.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.