log4j vs logback [đã đóng]


152

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)


1
logback nghe rất giống với đăng nhập jakarta commons - sự khác biệt chính là gì?
matt b

12
SLF4J (là mặt tiền) âm thanh tương tự như commons.logging. Sự khác biệt chính là SLF4J đang sử dụng liên kết tĩnh trong khi commons.logging đang sử dụng một số chiến lược phân giải. Logback ("bản địa" (nghĩa là không có lớp bao bọc bổ sung) của mặt tiền) có thể so sánh với LOG4J nhưng có API phong phú hơn.
Huxi

Câu trả lời:


190

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ó.


28
Đây là một cơ hội thực sự để nói chuyện với nhà phát triển của một phần mềm phổ biến rộng rãi như vậy. Cảm ơn Ceki cho log4j.
Srujan Kumar Gulla

7
Tuyên bố miễn trừ trách nhiệm: Anh chàng này là nhà phát triển ban đầu của tất cả Log4j, SLF4J và Logback. Nhưng đừng làm việc nữa cho Log4j.
Victor Stafusa

56

Bạn có nên .

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?)


48
Lưu ý: Dự án log4j không xem xét log4j không dùng nữa.
Thorbjørn Ravn Andersen

17
Thuật ngữ cần được làm rõ; một cách dứt khoát, tác giả của dự án log4j coi logback là sự kế thừa của log4j. Đó là cùng một tác giả của cả hai dự án, vì vậy ý ​​kiến ​​của anh ta nên có trọng lượng; bản thân "dự án log4j" không thực sự "xem xét" bất cứ điều gì. Nhóm người hiện tại liên quan đến log4j có ý kiến ​​khác nhau (một số thực sự đồng ý, một số không đồng ý không đáng ngạc nhiên). Với một chút lịch sử đằng sau chúng tôi (3 năm sau nhận xét ban đầu), SLF4J + Logback tiếp tục giành được chỗ đứng trên Log4j.
michael

@michael_n Xin lưu ý rằng Log4j 1 KHÔNG được viết bởi một người. Thật sai lầm khi nói "cùng tác giả". Ceki là một tác giả quan trọng, không nghi ngờ, nhưng không phải là người duy nhất. Trong thực tế, rất nhiều người đã giúp tạo ra Log4j 1.
Christian

@Christian "KHÔNG được viết ..." tất nhiên, điều đó nên được ngụ ý cho bất kỳ dự án apache trưởng thành nào (và trình độ của tôi, "nhóm người hiện tại liên quan đến log4j"); Tuy nhiên, nếu tôi có thể chỉnh sửa nhận xét, tôi sẽ nói " tác giả ban đầu ", vì bài viết trên wikipedia cũng nêu rõ. Re: "Trên thực tế, rất nhiều người đã giúp tạo ra Log4j 1 đúng như vậy" , điều đó hoàn toàn đúng, tương đương (nghĩa là tốt hơn hay xấu hơn); và cũng, theo một cách nào đó, đã góp phần vào sự khởi đầu của slf4j + logback :-)
michael

3
Vì vậy, những gì trong đó cho tất cả các bạn đang chiến đấu trên thư viện đăng nhập này hoặc đó? Tại sao chúng ta cố gắng giết / quảng bá thư viện? Ít nhất cung cấp một số lý do hợp lý TẠI SAO cái này tốt hơn cái kia. Chúa ơi, Stack Overflow là một mớ hỗn độn.
Người dùng

48

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.


19

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.


3
Tôi biết SLF4J. Nhưng tôi yêu cầu khung đăng nhập không phải cho mặt tiền!

4
Lời xin lỗi. Những gì tôi đã đề nghị là nếu bạn đang sử dụng SLF4J thay vì mặt tiền tùy chỉnh của riêng bạn, thì việc chuyển từ log4j sang logback sẽ bớt đau hơn?
bộ công cụ

Nguồn trích dẫn đó là gì? Commons đăng nhập là một thành phần đã thử và thử nghiệm. Tôi chưa bao giờ có bất kỳ rò rỉ bộ nhớ với nó.
Kshitiz Sharma

1
@KshitizSharma - từ liên kết tài liệu SLF4J tôi đã cung cấp: slf4j.org/manual.html
bộ công cụ

13

Quyết định của bạn nên dựa trên

  • nhu cầu thực tế của bạn cho những "tính năng khác"; và
  • chi phí dự kiến ​​của bạn để thực hiện thay đổi.

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.


3

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.