Hãy tiếp tục: lập trình tới API log4j2 thay vì slf4j
An toàn: API Log4j2 cung cấp các đảm bảo chính xác như slf4j - và hơn thế nữa.
Bây giờ bản thân Log4j2 được tách thành API và mô-đun triển khai, không còn bất kỳ giá trị nào trong việc sử dụng SLF4J.
Có, đó là thực hành tốt để giữ cho các tùy chọn của bạn luôn mở. Bạn có thể muốn thay đổi cách triển khai ghi nhật ký khác sau này.
Trong 10 năm qua, việc xây dựng tính linh hoạt như vậy trong ứng dụng của bạn có nghĩa là sử dụng API trình bao bọc như SLF4J. Tuy nhiên, tính linh hoạt này không miễn phí: nhược điểm của phương pháp này là ứng dụng của bạn không thể sử dụng bộ tính năng phong phú hơn của thư viện ghi nhật ký cơ bản.
Log4j2 cung cấp một giải pháp không yêu cầu ứng dụng của bạn bị hạn chế ở mẫu số chung thấp nhất.
Van thoát: log4j-to-slf4j
Log4j2 bao gồm một log4j-to-slf4j
mô-đun cầu nối. Bất kỳ ứng dụng nào được mã hóa dựa trên API Log4j2 đều có thể chọn chuyển triển khai hỗ trợ sang bất kỳ triển khai tuân thủ slf4j nào bất kỳ lúc nào.
Như đã đề cập trong câu hỏi, sử dụng API Log4j2 trực tiếp cung cấp nhiều chức năng hơn và có một số lợi thế phi chức năng so với sử dụng API trình bao bọc như slf4j:
- API thông báo
- Lambdas vì lười ghi nhật ký
- Ghi nhật ký bất kỳ đối tượng nào thay vì chỉ chuỗi
- Không có rác: tránh tạo các kỳ lạ hoặc tạo Chuỗi nếu có thể
- ClosableThreadContext tự động xóa các mục khỏi MDC khi bạn hoàn thành chúng
(Xem 10 tính năng API Log4j2 không có trong SLF4J để biết thêm chi tiết.)
Các ứng dụng có thể sử dụng một cách an toàn các tính năng phong phú này của API Log4j2 mà không bị khóa triển khai lõi Log4j2 gốc.
SLF4J vẫn là van an toàn của bạn, điều đó không có nghĩa là ứng dụng của bạn phải viết mã chống lại API SLF4J nữa.
Tiết lộ: Tôi đóng góp cho Log4j2.
Cập nhật: Có vẻ như có một số nhầm lẫn rằng lập trình cho API Log4j2 bằng cách nào đó giới thiệu "mặt tiền cho mặt tiền". Không có sự khác biệt về mặt này giữa API Log4j2 và SLF4J.
Cả hai API đều yêu cầu 2 phụ thuộc khi sử dụng triển khai gốc và 4 phụ thuộc cho triển khai không phải gốc. SLF4J và API Log4j2 giống hệt nhau về mặt này. Ví dụ:
slf4j
và đăng nhập lại (hoặc log4jv1)? Sau đó, tôi có nên buộc phải cài đặt trình ghi nhật ký thứ ba để sử dụng ứng dụng của bạn không? Hoặc có thể bảo mật công ty quyết định bạn chỉ có thể sử dụngjava.util.logging
trong sản xuất, sau đó thì sao?