2012-06-28 26 views
37

Tôi muốn có hai logger log4j khác nhau trong ứng dụng của mình và để không có "chồng chéo" giữa nội dung mà chúng ghi vào nhật ký tôn trọng của chúng.log4j.properties file - nhiều logger trong cùng một lớp

Ví dụ:

  • Logger1 viết sự kiện INFO liên quan đến một tập hợp các sự kiện hệ thống
  • Logger2 viết sự kiện INFO liên quan đến một loạt các sự kiện hệ thống
  • Không nhập sẽ xuất hiện trong nhật ký hai lần

log4j.properties của tôi là như sau:

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

Mã của tôi Java là như sau:

public static void main(String[] args) { 
    PropertyConfigurator.configure(Client.class 
      .getResource("/log4j.properties")); 
    xdasLogger = Logger.getLogger("xdasLogger"); 
    logger = Logger.getLogger(Client.class); 

    logger.info("normal"); 
    xdasLogger.info("xdas"); 
} 

Nhưng giao diện điều khiển đầu ra của tôi là như sau:

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 
xdas 

Lưu ý rằng "xdas" được đăng nhập bởi cả loggerxdasLogger, mà là không mong muốn.

Có ai biết những thay đổi nào tôi cần để đưa vào log4j.properties của mình để thay đổi đầu ra của bàn điều khiển thành sau không?

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 

Solution (lấy từ câu trả lời được chấp nhận):

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

Trả lời

41

Hãy thử thiết lập các additivity của logger false. Điều này sẽ tránh được việc truyền đến rootLogger.

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 
+0

Giải pháp của bạn có vẻ hoàn toàn chính xác nhưng không hoạt động đối với tôi. Tôi đã thêm những dòng này vào '/ etc/spark/conf/log4j.properties', điều đó có đúng không? Tôi có cần phải khởi động lại «Spark' (hoặc đặt lại bất kỳ thứ gì khác) để các thuộc tính cập nhật được chọn không? –

+0

Bạn đã sử dụng tên logger đã được cấu hình trong log4j.properties cho Spark chưa? Hoặc có thể Spark sử dụng log4j2 có một tệp thuộc tính khác - log4j2.properties? Nếu bạn có thể cung cấp thêm chi tiết, tôi có thể cố gắng giúp – kjp

+0

** @ kjp ** theo như tôi biết, 'Spark 2.3.0' (phát hành ngày 28 tháng 2 năm 2018) vẫn sử dụng' log4j' như đã nói [ở đây] (https : //spark.apache.org/docs/latest/configuration.html#configuring-logging). Ngoài ra, bạn có ý nghĩa gì bởi * "tên logger đã được cấu hình trong log4j.properties cho Spark" *? Trong các tệp 'log4j.properties' tôi thấy các dòng như sau:' log4j.rootCategory = WARN, console' & 'log4j.appender.console = org.apache.log4j.ConsoleAppender' –

Các vấn đề liên quan