2008-10-07 53 views
126

Chúng tôi đang sử dụng log4j phía sau trình bao bọc tự chế. Chúng tôi dự định sử dụng nhiều tính năng khác của nó ngay bây giờ.log4j vs logback

Chúng tôi có nên cập nhật để đăng nhập không?

(Ý tôi là khuôn khổ không phải là một mặt tiền như SLF4J)

+1

âm thanh logback rất giống với jakarta commons logging - sự khác biệt chính là gì? –

+12

SLF4J (là mặt tiền) có âm 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 "gốc" (tức là không có lớp bọc bổ sung) nào được thực hiện của mặt tiền) có thể so sánh với LOG4J nhưng có API phong phú hơn. – Huxi

Trả lời

18

Không chính xác trả lời câu hỏi của bạn, nhưng nếu bạn có thể di chuyển ra khỏi wrapper tự lập của bạn sau đó có Simple Logging Facade for Java (SLF4J) mà Hibernate hiện nay đã chuyển sang (thay vì commons logging).

SLF4J không gặp phải vấn đề về trình tải lớp hoặc rò rỉ bộ nhớ quan sát với Jakarta Commons Logging (JCL).

SLF4J hỗ trợ ghi nhật ký JDK, log4j và logback. Vì vậy, sau đó nó sẽ được khá dễ dàng để chuyển đổi từ log4j để logback khi thời gian là đúng.

Chỉnh sửa: Aplogies mà tôi đã không làm cho bản thân mình rõ ràng. Tôi đã đề nghị sử dụng SLF4J để cô lập chính mình khỏi phải thực hiện một sự 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 dành cho mặt tiền! –

+4

Xin lỗi. Những gì tôi đã gợi ý 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, sau đó chuyển từ log4j để logback sẽ ít đau đớn? – toolkit

+0

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ớ nào với nó. –

12

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

  • nhu cầu thực tế của bạn cho những "tính năng hơn"; và
  • chi phí dự kiến ​​thực hiện thay đổi của bạ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 khung đăng nhập rất phức tạp, bạn có thể muốn xem xét lý do.

164

Tự động thực thi API SLF4J. Điều này có nghĩa rằng nếu bạn đang sử dụng logback, bạn đang thực sự sử dụng API SLF4J. Về mặt lý thuyết, bạn có thể sử dụng trực tiếp nội dung của API đăng nhập trực tiếp để ghi nhật ký, nhưng điều đó không được khuyến khích. Tất cả các tài liệu logback và các ví dụ về logger được viết dưới dạng API SLF4J. Vì vậy, bằng cách sử dụng logback, bạn sẽ thực sự sử dụng SLF4J và nếu vì bất kỳ lý do nào bạn muốn chuyển về log4j, bạn có thể thực hiện điều nà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 chuyển từ logback để Log4j, Logback phần cụ thể, đặc biệt là những người có trong tập tin cấu hình logback.xml sẽ vẫn cần phải được di chuyển đến log4j tương đương của nó, ví dụ: log4j.properties. Khi di chuyển theo hướng khác, cấu hình log4j, tức là log4j.properties, sẽ cần phải được chuyển đổi thành tương đương logback của nó. Có một số on-line tool cho điều đó. Số lượng công việc liên quan đến việc di chuyển tệp cấu hình là nhiều hơn ít hơn công việc cần thiết để di chuyển các cuộc gọi nhật ký được phổ biến trong tất cả mã nguồn của phần mềm và các phụ thuộc của nó.

+18

Cơ hội reare của nó để nói chuyện với nhà phát triển phần mềm phổ biến rộng rãi như vậy. Cảm ơn Ceki cho log4j. –

+0

Tuyên bố miễn trừ trách nhiệm: Người 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. –

+0

Cảm ơn bạn đã đề cập đến công cụ chuyển đổi trực tuyến –

52

Nếu bạn? .

Tại sao? Log4J về cơ bản đã không được chấp nhận bởi Logback.

Có khẩn cấp không? Có thể không.

Có đau không? Có lẽ, nhưng nó có thể phụ thuộc vào báo cáo khai thác gỗ của bạn.

Lưu ý rằng nếu bạn thực sự muốn tận dụng tối đa LogBack (hoặc SLF4J), thì bạn thực sự cần phải viết proper logging statements. Đ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 nhân viên bảo vệ.

Cuối cùng, tôi khuyên bạn nên sử dụng SLF4J. (Tại sao tạo lại bánh xe bằng mặt tiền của riêng bạn?)

+40

Lưu ý: Dự án log4j không xem xét việc log4j không dùng nữa. –

+14

Thuật ngữ cần được làm rõ; một cách rõ ràng, [tác giả của dự án log4j] (http://en.wikipedia.org/wiki/Log4j) xem xét [logback là người kế thừa] (http://logback.qos.ch/) của log4j. Đó là cùng một tác giả của cả hai dự án, do đó, ý kiến ​​của ông nên mang theo một số trọng lượng; "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ố người thực sự đồng ý, một số không đáng ngạc nhiên không đồng ý). Với một lịch sử ít hơn sau chúng tôi (3 năm sau khi bình luận ban đầu), SLF4J + Logback làm tiếp tục để đạt được mặt đất trên Log4j. – michael

+0

@michael_n Xin lưu ý rằng Log4j 1 KHÔNG được viết bởi một người. Nó sai khi nói "cùng một 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 làm cho Log4j 1 nó là gì. – Christian

3

Dự án trưởng thành hoặc thậm chí dự án sâu vào các giai đoạn phát triển có lẽ 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à cao cấp hơn nhiều trong một mảng các điểm, nhưng không đến một 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 đăng nhập cho một sự phát triển mới, nhưng log4j hiện tại là đủ tốt và trưởng thành cho bất cứ điều gì đã được phát hành và gặp người dùng cuối. Điều này rất chủ quan, bạn nên tự mình xem chi phí.

33

Trong thế giới ghi nhật ký có các mặt tiền (như đăng nhập Apache Commons, slf4j hoặc thậm chí API Log4j 2.0) và 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 selfmade bằng slf4j IF và chỉ NẾU bạn không hài lòng với nó vì một lý do nào đó. Trong khi Apache Commons Logging không thực sự cung cấp một 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 wrapper nó có thể có ý nghĩa để sử dụng đó.

slf4j đưa ra một số đường API tốt đẹp, như ví dụ này từ tài liệu slf4j:

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

Đó là thay biến. Điều này cũng được hỗ trợ bởi Log4j 2.

Tuy nhiên bạn cần phải biết 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 Tổ chức phần mềm Apache. Trong ba năm qua, một cộng đồng năng động và sôi động đã phát triển ở đó một lần nữa. Nếu bạn đánh giá cao Nguồn mở vì nó được thực hiện bởi Quỹ Phần mềm Apache 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 Log4j 2 trực tiếp.

Xin lưu ý:

Trong quá khứ log4j 1 không được duy trì tích cực trong khi Đăng nhập lại. Nhưng ngày nay mọi thứ khác nhau. Log4j 2 được chủ động duy trì và phát hành theo lịch trì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 Logback. Điều này đôi khi chỉ là vấn đề về 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 cái nhìn tổng quát 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 khuôn khổ khai thác gỗ khác. Nhưng cơ sở mã là khác nhau; nó chia sẻ hầu 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ì Strings dưới mui xe. Ngoài ra nó không mất 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 so với các khuôn khổ khác mà tôi biết: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

Và vẫn còn cộng đồng người dùng có vẻ là lớn hơn nhiều so với Logbacks: http://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

Đó là tất cả nói ý tưởng tốt nhất là bạn chọn khung khai thác gỗ 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 công tác đầy đủ nếu tôi vô hiệu hóa việc đăng nhập vào môi trường sản xuất và chỉ thực hiện ghi nhật ký 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ý, hãy nhìn vào các tính năng được cung cấp bởi các khung công tác và các nhà phát triển của chúng. Trong khi bạn nhận được hỗ trợ thương mại cho Logback thông qua QOS (tôi nghe nói) hiện tại không có hỗ trợ thương mại cho Log4j 2. Mặt khác, nếu bạn cần thực hiện kiểm tra và cần hiệu suất cao được cung cấp bởi các ứng dụng async, nó có nhiều ý nghĩa kiểm tra log4j 2.

Xin lưu ý bất chấp mọi tiện nghi mà chúng cung cấp, mặt tiền luôn ăn một chút hiệu suất. Nó có thể không ảnh hưởng đến bạn cả, nhưng nếu bạn đang ở trên các nguồn tài nguyên thấp, bạn có thể cần phải lưu tất cả mọi thứ bạn có thể có.

Nếu không biết yêu cầu của bạn tốt hơn thì hầu như không thể đưa ra đề xuất. Chỉ cần: không chuyển đổi chỉ vì rất 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 tính nữa. Nó còn sống, và nó nóng.

KHUYẾN CÁO: Tôi hiện là VP, Dịch vụ đăng nhập Apache và tham gia vào log4j.