2012-02-21 31 views
5

Nếu nhật ký phụ thuộc bên thứ ba sử dụng khung công tác cụ thể (như log4j) và tôi muốn ứng dụng ghi nhật ký qua slf4j, thì có thể cấu hình log4j (trong tệp XML, thuộc tính, vv) để chuyển hướng thông điệp tường trình tới API slf4j? (Trong thời gian chạy, sẽ liên kết với một ràng buộc slf4j cụ thể của sự lựa chọn của tôi.)Định tuyến lại log4j thành slf4j

Sẽ tốt hơn nếu nhận tất cả các thông điệp tường trình đến cùng một địa điểm thông qua cùng một API.

Tôi thậm chí không phiền nếu tôi phải làm điều gì đó một chút điên, như điểm log4j.properties cho một số mã tạm thời (mà tôi sẽ viết), do đó hướng lưu lượng truy cập đến slf4j!

Tôi chỉ không biết bắt đầu từ đâu. Cảm ơn trước!

Trả lời

4

Tất nhiên bạn có thể và nó được giải thích kỹ lưỡng trong các documentation:

log4j-over-slf4j

tàu SLF4J với một module gọi là log4j-over-slf4j. Nó cho phép người dùng log4j di chuyển các ứng dụng hiện có sang SLF4J mà không cần thay đổi một dòng mã nào mà chỉ đơn giản bằng cách thay thế tệp log4j.jar bằng log4j-over-slf4j.jar, như được mô tả bên dưới.

Cả hai bị hack và khéo léo - bạn đang xóa log4j.jar và thay thế bằng log4j-over-slf4j.jar. JAR sau này phản ánh các lớp Log4J trong cùng một gói, do đó ứng dụng và thư viện của bạn thậm chí không cần phải biên dịch lại. Nhưng các triển khai mới chỉ đơn giản là định tuyến lại đến SLF4J.

+0

Ahhh, do đó, một liên kết slf4j * liên kết slf4j với một số hệ thống ghi nhật ký cơ bản, nhưng một cầu slf4j * ánh xạ/chuyển hướng một số hệ thống ghi nhật ký cơ bản đến slf4j. Đó có phải là một sự khẳng định công bằng không? – IAmYourFaja

+0

@herpylderp: vâng! Hơn nữa, bạn phải có chính xác một SLF4J ràng buộc nhưng bất kỳ số lượng cầu. –

+1

Cảnh báo 'log4j-over-slf4j.jar' là triển khai một phần của api 'log4j', vì vậy nếu thư viện của bạn sử dụng một số lớp không được triển khai trong cầu, bạn sẽ gặp lỗi ClassNotFound –

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