Tôi gặp sự cố với thông báo tường trình trùng lặp khi ghi vào nhiều tệp nhật ký bằng cách sử dụng log4j.Log4j: Nhiều nhật ký, cấp độ và ứng dụng
Hiện nay tôi đang cố gắng để đăng nhập INFO
dữ liệu cấp (và trở lên) cho logger cụ thể có tên foobar trong tập tin foo.log
tôi và sau đó tất cả các thư WARN
mức log (và trở lên) cho tất cả logger trong file bar.log
. Do đó, các thông điệp tường trình trùng lặp được ghi vào tệp foo.log
(mỗi dòng được ghi hai lần) và sau một số nghiên cứu nhanh, tôi nhận thấy đề xuất sửa lỗi này là thêm log4j.additivity.foobar=false
vào tệp thuộc tính của tôi.
Vấn đề ở đây là mặc dù nó dừng lại dòng trùng lặp, các WARN
nhắn từ foobar logger không bao giờ được ghi vào tệp bar.log
.
My tập tin thuộc tính log4j như sau:
log4j.rootLogger = WARN, FOO, BAR
log4j.logger.foobar = INFO, FOO
log4j.additivity.foobar = false
log4j.appender.FOO = org.apache.log4j.RollingFileAppender
log4j.appender.FOO.layout = org.apache.log4j.PatternLayout
log4j.appender.FOO.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.FOO.File = foo.log
log4j.appender.BAR = org.apache.log4j.RollingFileAppender
log4j.appender.BAR.layout = org.apache.log4j.PatternLayout
log4j.appender.BAR.layout.ConversionPattern = %d{ISO8601} %-5p %c ~ %m%n
log4j.appender.BAR.File = bar.log
Có ai biết làm thế nào tôi có thể viết các thông điệp log cho cả file log (như nó đã làm trước khi tôi bắt đầu thiết lập các additivity
tài sản) và vẫn ngăn chặn các thông điệp tường trình trùng lặp?
Xin lưu ý, đây là bản tóm tắt đơn giản về sự cố. Trong kịch bản thế giới thực có nhiều nhật ký và nhiều hơn hai tệp nhật ký
này là tất cả tốt đẹp và tốt, nhưng điều này không phải là những gì được yêu cầu. Làm thế nào để phân biệt này bằng logger? câu hỏi ban đầu chỉ cho biết 'foobar' chuyển sang foo, và tất cả logger bao gồm foobar đi tới thanh –
Câu hỏi yêu cầu một giải pháp trong đó tất cả các thông điệp' INFO' cho bộ ghi 'foobar' đi tới tệp' foo.log' và tất cả ' WARN' tin nhắn cho tất cả các logger đi đến tập tin 'bar.log' (và cũng rằng mỗi thông điệp tường trình chỉ được viết một lần trong tập tin thích hợp). –
không, __all logger__, không chỉ 'foobar' được gửi đến' bar.log'. Theo câu hỏi: "Hiện tại tôi đang cố gắng ghi dữ liệu cấp" INFO' cho trình ghi cụ thể có tên 'foobar' trong tệp foo.log của tôi và sau đó tất cả thông báo nhật ký cấp độ' WARN' cho __all loggers__ trong thanh. tệp nhật ký. " –