Chúng tôi đang sử dụng log4j đằng sau một trình bao bọc tự tạo. Chúng tôi dự định sử dụng nhiều tính năng hơn của nó bây giờ.
Chúng ta có nên cập nhật để đăng nhập lại không?
(Ý tôi là khung không phải là mặt tiền như SLF4J)
Chúng tôi đang sử dụng log4j đằng sau một trình bao bọc tự tạo. Chúng tôi dự định sử dụng nhiều tính năng hơn của nó bây giờ.
Chúng ta có nên cập nhật để đăng nhập lại không?
(Ý tôi là khung không phải là mặt tiền như SLF4J)
Câu trả lời:
Logback thực sự thực hiện API SLF4J. Điều này có nghĩa là nếu bạn đang sử dụng logback, bạn thực sự đang sử dụng API SLF4J. Về mặt lý thuyết, bạn có thể sử dụng các phần bên trong của API logback trực tiếp để ghi nhật ký, nhưng điều đó rất không được khuyến khích. Tất cả tài liệu đăng nhập và ví dụ về loggers được viết theo thuật ngữ API SLF4J.
Vì vậy, bằng cách sử dụng logback, bạn thực sự đang sử dụng SLF4J và nếu vì bất kỳ lý do nào bạn muốn chuyển trở lại log4j, bạn có thể làm như vậy trong vòng vài phút bằng cách thả slf4j-log4j12.jar vào đường dẫn lớp của bạn.
Khi di chuyển từ logback sang log4j, các phần cụ thể của logback, cụ thể là những phần có trong tệp cấu hình logback.xml vẫn cần phải được di chuyển sang log4j tương đương, tức là log4j.properies . Khi di chuyển theo hướng khác, cấu hình log4j, tức là log4j.properies , sẽ cần phải được chuyển đổi thành tương đương logback của nó. Có một công cụ trực tuyến cho điều đó. Khối lượng công việc liên quan đến các file cấu hình di cư là nhiều ít hơn công việc cần thiết cho các cuộc gọi logger di cư phổ biến khắp tất cả các mã nguồn của phần mềm của bạn và phụ thuộc của nó.
Bạn có nên Có .
Tại sao? Log4J về cơ bản đã bị phản đối bởi Logback .
Có khẩn cấp không? Có thể không.
Có đau không? Có thể, nhưng nó có thể phụ thuộc vào báo cáo đăng nhập của bạn.
Lưu ý rằng nếu bạn thực sự muốn tận dụng lợi thế của LogBack (hoặc SLF4J), thì bạn thực sự cần phải viết các báo cáo ghi nhật ký thích hợp . Điều này sẽ mang lại lợi thế như mã nhanh hơn vì đánh giá lười biếng và ít dòng mã hơn vì bạn có thể tránh được các vệ sĩ.
Cuối cùng, tôi đánh giá cao SLF4J. (Tại sao phải tạo lại bánh xe với mặt tiền của riêng bạn?)
Trong thế giới ghi nhật ký có các Mặt tiền (như Nhật ký Apache Commons, slf4j hoặc thậm chí API Log4j 2.0) và các triển khai (Log4j 1 + 2, java.util.logging, TinyLog, Logback).
Về cơ bản, bạn nên thay thế trình bao bọc tự tạo của mình bằng slf4j IF và chỉ NẾU bạn không hài lòng với nó vì một số lý do. Trong khi Apache Commons Logging không thực sự cung cấp API hiện đại, slf4j và mặt tiền Log4j 2 mới đang cung cấp điều đó. Cho rằng khá nhiều ứng dụng sử dụng slf4j như một trình bao bọc, có thể có ý nghĩa khi sử dụng nó.
slf4j cung cấp một số đường API đẹp, như ví dụ này từ các tài liệu slf4j:
logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);
Đó là sự thay thế. Điều này cũng được hỗ trợ bởi Log4j 2.
Tuy nhiên, bạn cần lưu ý rằng slf4j được phát triển bởi QOS, người cũng duy trì logback. Log4j 2.0 được nướng trong Quỹ phần mềm Apache. Trong ba năm qua, một cộng đồng sôi động và tích cực đã phát triển trở lại. Nếu bạn đánh giá cao Nguồn mở do Quỹ Phần mềm Apache thực hiện với tất cả các đảm bảo của nó, bạn có thể xem xét lại bằng cách sử dụng slf4j để sử dụng trực tiếp Log4j 2.
Xin lưu ý:
Trước đây log4j 1 không được duy trì tích cực trong khi Logback là. Nhưng hôm nay mọi thứ đã khác. Log4j 2 được tích cực duy trì và phát hành theo lịch trình gần như thường xuyên. Nó cũng bao gồm rất nhiều tính năng hiện đại và -imho- làm cho một vài điều tốt hơn so với Logback. Điều này đôi khi chỉ là một vấn đề của hương vị và bạn nên rút ra kết luận của riêng bạn.
Tôi đã viết một tổng quan nhanh về các Tính năng mới của Log4j 2.0: http://www.grobmeier.de/the-new-log4j-2-0-05122012.html
Khi đọc bạn sẽ thấy rằng Log4j 2 được lấy cảm hứng từ Logback mà còn bởi các khung đăng nhập khác. Nhưng cơ sở mã là khác nhau; nó chia sẻ gần như không có gì với Log4j 1 và 0 với Logback. Điều này dẫn đến một số cải tiến như trong ví dụ Log4j 2 hoạt động với bytestreams thay vì String dưới mui xe. Ngoài ra, nó không mất các sự kiện trong khi cấu hình lại.
Log4j 2 có thể đăng nhập với tốc độ cao hơn các khung công tác khác mà tôi biết: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html
Và cộng đồng người dùng dường như vẫn lớn hơn nhiều so với Logbacks: http://www.grobmeier.de/apache-log4j-is-the-lead-logging-framework-06082013.html
Tất cả đã nói ý tưởng tốt nhất là bạn chọn các khung đăng nhập phù hợp nhất với những gì bạn muốn đạt được. Tôi sẽ không chuyển đổi một khung đầy đủ nếu tôi vô hiệu hóa đăng nhập trong môi trường sản xuất và chỉ thực hiện đăng nhập cơ bản trong ứng dụng của mình. Tuy nhiên, nếu bạn làm nhiều hơn một chút với việc ghi nhật ký, chỉ cần nhìn vào các tính năng được cung cấp bởi các khung công tác và nhà phát triển của họ. Mặc dù bạn nhận được hỗ trợ thương mại cho Logback thông qua QOS (tôi đã nghe) nhưng hiện tại không có hỗ trợ thương mại nào cho Log4j 2. Mặt khác, nếu bạn cần thực hiện ghi nhật ký kiểm toán và cần hiệu suất cao được cung cấp bởi các ứng dụng không đồng bộ thì nó rất có ý nghĩa kiểm tra log4j 2.
Xin lưu ý mặc dù tất cả sự thoải mái mà họ cung cấp, mặt tiền luôn ăn một chút hiệu suất. Điều này có thể không ảnh hưởng đến bạn, nhưng nếu bạn có tài nguyên thấp, bạn có thể cần phải lưu mọi thứ bạn có thể có.
Không biết bạn yêu cầu tốt hơn, gần như không thể đưa ra một đề nghị. Chỉ: đừng chuyển đổi chỉ vì nhiều người chuyển đổi. Chỉ chuyển đổi vì bạn thấy giá trị của nó. Và lập luận rằng log4j đã chết không còn được tính nữa. Nó còn sống và nóng.
TUYÊN BỐ TỪ CHỐI: Tôi hiện đang là VP, Dịch vụ ghi nhật ký Apache và cũng tham gia vào log4j.
Không trả lời chính xác câu hỏi của bạn, nhưng nếu bạn có thể rời khỏi trình bao bọc tự tạo của mình thì có Mặt tiền đăng nhập đơn giản cho Java (SLF4J) mà Hibernate hiện đã chuyển sang (thay vì đăng nhập chung).
SLF4J không gặp phải vấn đề nào trong trình tải lớp hoặc rò rỉ bộ nhớ được quan sát với Nhật ký Jakarta Commons (JCL).
SLF4J hỗ trợ ghi nhật ký JDK, log4j và logback. Vì vậy, nó khá dễ dàng để chuyển từ log4j sang logback khi thời gian thích hợp.
Chỉnh sửa: Aplogies mà tôi đã không làm cho mình rõ ràng. Tôi đã đề nghị sử dụng SLF4J để cô lập bản thân khỏi phải đưa ra lựa chọn khó khăn giữa log4j hoặc logback.
Quyết định của bạn nên dựa trên
Bạn nên chống lại sự thôi thúc thay đổi API chỉ vì nó "mới hơn, sáng hơn, tốt hơn". Tôi tuân theo chính sách "nếu nó không bị hỏng, đừng đá nó."
Nếu ứng dụng của bạn yêu cầu một khung đăng nhập rất tinh vi, bạn có thể muốn xem xét lý do tại sao.
Dự án trưởng thành hoặc thậm chí dự án đi sâu vào các giai đoạn phát triển có thể sẽ mất nhiều hơn lợi ích từ việc nâng cấp như vậy, IMHO. Logback chắc chắn là tiên tiến hơn nhiều trong một loạt các điểm, nhưng không đến mức thay thế hoàn toàn trong một hệ thống làm việc. Tôi chắc chắn sẽ xem xét logback cho một sự phát triển mới, nhưng log4j hiện tại đủ tốt và trưởng thành cho mọi thứ đã được phát hành và đáp ứng người dùng cuối. Điều này là rất chủ quan, bạn nên xem chi phí cho mình.