2012-01-25 29 views
5

Đây là log4j.properties tập tin của tôilog4j - Tránh cùng nhắn hai lần trong log

# Set loggers' levels 
log4j.rootLogger=warn, trace_file 

# Appender 
log4j.appender.trace_file=org.apache.log4j.RollingFileAppender 
log4j.appender.trace_file.Append=true 
log4j.appender.trace_file.File=log/myLog.log 
log4j.appender.trace_file.MaxFileSize=10MB 
log4j.appender.trace_file.MaxBackupIndex=50 

# PatternLayout 
log4j.appender.trace_file.layout=org.apache.log4j.PatternLayout 
log4j.appender.trace_file.layout.ConversionPattern=%d [%p] (%F:%L) %m%n 

# Classes 
log4j.logger.my_package=info, trace_file 

Những gì tôi muốn:

  • yêu cầu cửa hàng đăng nhập từ my.package trong trace_file với ít nhất INFO mức cửa hàng
  • yêu cầu nhật ký từ tất cả các trình ghi nhật ký khác chỉ trong trace_file CHỈ nếu ít nhất là WARN cấp

Cấu hình của tôi không hoạt động. Nếu my.package tăng yêu cầu nhật ký cấp WARN, yêu cầu nhật ký này được viết hai lần. Nếu tôi sử dụng hai ứng dụng riêng biệt, không có vấn đề gì.

Tôi đang thiếu gì?

Trả lời

6

Thử xóa chỉ thị "trace_file" khỏi câu lệnh nhật ký my_package.

4

Thay đổi

log4j.logger.my_package=info, trace_file 

để

log4j.logger.my_package=info 

appenders được thừa hưởng từ cha mẹ logger theo mặc định, vì vậy bằng cách xác định trace_file cho cả logger gốc và my_package, bạn đang nói với nó để làm điều đó hai lần.

1

Bạn đang thiếu vai trò của rootLogger.

Phạt cảnh cáo từ my_package với bị bắt bởi trace_file qua logguer gốc log4j.rootLogger=warn, trace_file, và sau đó bởi appender cùng qua log4j.logger.my_package=info, trace_file

Tôi cho rằng khi bạn đã tạo một appender thứ hai, bạn không nói rõ nó vào rootLogger, phải không?

Ngoài ra, bạn có thể thay đổi chỉ mức độ thừa hưởng từ gốc và giữ appender cùng

log4j.logger.my_package=info 
1

Ngăn chặn appender-additivity qua:

log4j.additivity.my_package = false

Xem http://logging.apache.org/log4j/1.2/manual.html , phần "Người xếp chồng và bố cục" ..

Trích:

Bổ sung phụ kiện Kết quả của bản ghi nhật ký của trình ghi nhật ký C sẽ chuyển đến tất cả các ứng dụng trong C và tổ tiên của nó là . Đây là ý nghĩa của thuật ngữ "addender appender".

Tuy nhiên, nếu tổ tiên của trình ghi C, thì P, có cờ bổ sung được đặt thành false, sau đó đầu ra của C sẽ được chuyển đến tất cả các ứng dụng trong C và tổ tiên của nó tối đa và bao gồm P nhưng không phải là người bổ trợ bất kỳ tổ tiên nào của P.

Trình ghi nhật ký có cờ bổ sung được đặt thành true theo mặc định.

1

Điều này giống như vấn đề về độ nhạy.

Tôi không quen với cấu hình tệp thuộc tính nhưng phải có tùy chọn cờ additivity khi bạn xác định trình ghi nhật ký. Việc đặt thành false sẽ giải quyết vấn đề. Ngoài ra, bằng cách sử dụng cấu hình xml thay vì bạn có thể tận dụng tùy chọn Filter của log4j không có sẵn trong tệp thuộc tính.

Nó phải là một cái gì đó như thế này: log4j.logger.my_package.additivity = false

Cuối cùng, hãy nhìn vào logback nếu bạn không bao giờ nghe nói về nó trước khi

4

Tôi đồng ý với Gevorg. Nó có thể là một vấn đề phụ.

Những người đang sử dụng log4j.properties file:

Thêm log4j.additivity.com.example.package=false (thay thế org.hibernate với bất cứ gói bạn cần)

Những người đang sử dụng log4j.xml dựa config:.

<logger name="com.example.package" additivity="false"> 
.... 
</logger> 
Các vấn đề liên quan