2012-08-29 8 views
6

Tôi có một dự án A với log4j.jar trên đường dẫn xây dựng của nó. Tôi có một số lớp có báo cáo khai thác gỗ theo hình thức:Làm cách nào để định cấu hình đăng nhập log4j cho một cái bình?

Logger _log = Logger.getLogger(A.<>.class); 
... 
_log.info("..."); 

tôi xuất khẩu dự án như một jar vào một dự án B. Dự án B đã có jar log4j riêng của mình và tập tin cấu hình .xml riêng của nó . Tôi muốn cấu hình các lớp cụ thể từ A để đăng nhập vào Console Apender ở các "cấp độ" khác nhau. Làm thế nào để làm điều này, xin vui lòng?

Trả lời

1

Về cơ bản, bạn không nên làm điều đó. Hãy suy nghĩ theo cách này: nếu điều đó được thực hiện theo cách đó, mỗi thư viện được bao gồm trong bất kỳ ứng dụng nào sẽ lưu trữ cấu hình ghi nhật ký của riêng mình, rất có khả năng ghi đè bất kỳ ai trong ứng dụng và mỗi khác, theo thứ tự không được chỉ định . Bạn sẽ không muốn điều đó. Vậy nên đừng.

[Trong trường hợp bạn thực sự, thực sự muốn làm điều đó, bạn có thể có tập tin thuộc tính trong bình có thể được ghi đè bởi một tệp xml trong ứng dụng chính. Xem chi tiết here. Nhưng đừng. :)]

1

Nói chung, bạn không biết. Nói chung, bạn muốn có một tệp cấu hình log4j. Nhưng tôi cho rằng bạn có thể tải cấu hình của mình một cách rõ ràng từ mã của mình, như được mô tả trong the log4j documentation

1

Chọn phiên bản của log4j.jar, có lẽ là phiên bản mới hơn. Bạn chỉ có thể sử dụng một phiên bản. Bạn cần hợp nhất cấu hình ghi nhật ký của dự án A và dự án B. Bạn có thể làm điều này trong các lớp log4j trong thời gian chạy, nhưng không. Chỉ cần cắn viên đạn và hợp nhất chúng một lần trong kiểm soát nguồn.

+0

Tôi hiểu. Sau đó, thêm một logger cho com.A.something sẽ làm việc OK trong tập tin cấu hình của B mặc dù A được đóng gói trong một cái lọ? – mvd

+0

Có. Nhưng bạn không nên xử lý cấu hình ghi nhật ký như B nữa. Nó thuộc về toàn bộ ứng dụng. Hãy nghĩ về cấu hình bên trong B là mặc định để ghi đè hoặc thay thế hoàn toàn. Những gì jar các lớp đang ở trong không có liên quan đến cấu hình đăng nhập được áp dụng. Họ chỉ xảy ra để được đóng gói với nhau. Log4j có thể đọc tập tin cấu hình của nó từ classpath và Java tìm các lớp trên classpath. Đặt cả hai trong cùng một lọ chỉ là thuận tiện. –