Helpex - Trao đổi & giúp đỡ Đăng nhập
76

Các dự án mới có nên sử dụng logback thay vì log4j như một khung đăng nhập không?

Hoặc với các từ khác: 'Logback có tốt hơn log4j không (để lại SLF4J-'feature' của logback bên cạnh)? '

76 hữu ích 5 bình luận 19k xem chia sẻ
81

Bạn nên sử dụng SLF4J + Logback để đăng nhập.

Nó cung cấp các tính năng gọn gàng như tin nhắn được tham số hóa và (ngược lại với đăng nhập chung) một bối cảnh chẩn đoán đã ánh xạ (MDC, javadoc , tài liệu ).

Sử dụng SLF4J làm cho phần phụ trợ đăng nhập có thể trao đổi theo cách khá thanh lịch.

Ngoài ra, SLF4J hỗ trợ kết nối các khung ghi nhật ký khác với triển khai SLF4J thực tế mà bạn sẽ sử dụng để các sự kiện ghi nhật ký từ phần mềm của bên thứ ba sẽ hiển thị trong nhật ký hợp nhất của bạn - ngoại trừ java.util.logging không thể được bắc cầu tương tự như các khung đăng nhập khác.

Cầu nối được giải thích trong javadocs của SLF4JBridgeHandler.

Tôi đã có trải nghiệm rất tốt khi sử dụng kết hợp SLF4J + Logback trong một số dự án và quá trình phát triển LOG4J bị đình trệ khá nhiều.

SLF4J có những nhược điểm còn lại sau đây:

  • Nó không hỗ trợ các vararg để tương thích với Java <1.5
  • Nó không hỗ trợ sử dụng cả tin nhắn tham số và ngoại lệ cùng một lúc.
  • Nó không chứa hỗ trợ cho Bối cảnh chẩn đoán lồng nhau (NDC, javadoc ) mà LOG4J có.
81 hữu ích 5 bình luận chia sẻ
20

Tác giả (của cả Logback và Log4j) có một danh sách các lý do để thay đổi tại http://logback.qos.ch/reasonsToSwitch.html .

Đây là một vài thứ mắc kẹt ở tôi;

  • Thực hiện nhanh hơn

    Dựa trên công việc trước đây của chúng tôi trên log4j, nội bộ logback đã được viết lại để thực hiện nhanh hơn khoảng mười lần trên các đường dẫn thực thi quan trọng nhất định. Không chỉ các thành phần logback nhanh hơn, chúng còn có dung lượng bộ nhớ nhỏ hơn.

  • Tự động tải lại các tập tin cấu hình

    Logback-classic có thể tự động tải lại tập tin cấu hình của nó sau khi sửa đổi. Quá trình quét vừa nhanh vừa an toàn vì nó không liên quan đến việc tạo ra một luồng riêng để quét. Sự tinh tế kỹ thuật này đảm bảo rằng logback chơi tốt trong các máy chủ ứng dụng và nói chung là trong môi trường JEE.

  • Dấu vết ngăn xếp với dữ liệu đóng gói

    Khi logback in một ngoại lệ, dấu vết ngăn xếp sẽ bao gồm dữ liệu đóng gói. Dưới đây là dấu vết ngăn xếp mẫu được tạo bởi ứng dụng web logback-demo.

    14: 28: 48.835 [btpool0-7] INFO cqldemo.prime.PrimeAction - 99 không phải là giá trị hợp lệ java.lang.Exception: 99 không hợp lệ
    tại ch.qos.logback.demo.prime.PrimeAction.execute (PrimeAction.java : 28) [class /: na] tại org.apache.struts.action.RequestProcessor. ProcessActionPerform (RequestProcessor.java:431) [struts-1.2.9.jar: 1.2.9] tại org.apache.struts.action. RequestProcessor. Process (RequestProcessor.java:236) [struts-1.2.9.jar: 1.2.9] tại org.apache.struts.action.ActionServlet.doPost (ActionServlet.java:432) [struts-1.2.9.jar : 1.2.9] tại javax.servlet.http.HttpServlet.service (HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar: 6.1.12]
    tại org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:502) [jetty-6.1.12.jar: 6.1.12] tại ch.qos.logback.demo.UserServletFilter.doFilter (UserServletFilter.j ) [class /: na] tại org.mortbay.jetty.servlet.ServletHandler $ CacheedChain.doFilter (ServletHandler.java:1115) [jetty-6.1.12.jar: 6.1.12] tại org.mortbay.jetty.servlet. ServletHandler.handle (ServletHandler.java:361) [jetty-6.1.12.jar: 6.1.12] tại org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:417) [jetty-6.1.12.jar : 6.1.12] tại org.mortbay.jetty.handler.ContextHandlerCollection.handle (ContextHandlerCollection.java:230) [jetty-6.1.12.jar: 6.1.12]

    Từ những điều trên, bạn có thể nhận ra rằng ứng dụng đang sử dụng Struts phiên bản 1.2.9 và đã được triển khai theo phiên bản cầu tàu 6.1.12. Do đó, dấu vết ngăn xếp sẽ nhanh chóng thông báo cho người đọc về các lớp được xác định ngoại lệ mà cả các phiên bản gói và gói mà chúng thuộc về. Khi khách hàng của bạn gửi cho bạn một dấu vết ngăn xếp, với tư cách là nhà phát triển, bạn sẽ không còn cần phải yêu cầu họ gửi cho bạn thông tin về các phiên bản của gói mà họ đang sử dụng. Thông tin sẽ là một phần của dấu vết ngăn xếp. Xem từ chuyển đổi "% xThrowable" để biết chi tiết.

    Tính năng này có thể khá hữu ích đến mức một số người dùng nhầm tưởng đây là một tính năng của IDE của họ.

  • Tự động xóa lưu trữ nhật ký cũ

    Bằng cách đặt thuộc tính maxHistory của TimeBasingRollingPolicy hoặc SizeAndTimeBasingFNATP, bạn có thể kiểm soát số lượng tệp lưu trữ tối đa. Nếu chính sách cuộn của bạn yêu cầu cuộn qua hàng tháng và bạn muốn giữ nhật ký trị giá một năm, chỉ cần đặt thuộc tính maxHistory thành 12. Các tệp nhật ký lưu trữ cũ hơn 12 tháng sẽ tự động bị xóa.

Có thể có sự thiên vị ở đó, nhưng cùng một người đã viết cả hai khung và nếu anh ta nói sử dụng Logback trên Log4j thì có lẽ anh ta đáng nghe.

20 hữu ích 3 bình luận chia sẻ
10

Tôi sẽ sử dụng slf4j để đăng nhập trong mọi trường hợp. Điều này cho phép bạn chọn phụ trợ ghi nhật ký thực tế mà bạn muốn sử dụng, tại thời điểm triển khai thay vì thời gian mã.

Điều này đã được chứng minh là rất có giá trị với tôi. Nó cho phép tôi sử dụng log4j trong các JVM cũ và đăng nhập lại trong hơn 1,5 JVM và cả java.util.logging nếu cần.

10 hữu ích 0 bình luận chia sẻ
2

Nhận lại nhiều hơn Java EE:
nói chung (từ mã đến tài liệu), nó luôn ghi nhớ các thùng chứa - cách thức nhiều ứng dụng cùng tồn tại, cách trình tải lớp triển khai, v.v.

từ triển vọng của nhà phát triển gần như giống nhau, Logback thêm ghi nhật ký tham số (không cần sử dụng if (logger.isDebugEnabled ()) để tránh phí kết nối chuỗi)

Log4j - chỉ có cộng lớn là hỗ trợ JVM cũ, NDC nhỏ (IMO) (Chỉ trả lại MDC), một số tiện ích mở rộng. Ví dụ: tôi đã viết tiện ích mở rộng cho configureAndWatch cho Log4j, không có điều gì như vậy đối với Logback

2 hữu ích 0 bình luận chia sẻ
1

log4j và logback ban đầu được thiết kế và thực hiện bởi cùng một người.

một số công cụ nguồn mở đã sử dụng SLF4J. Tôi không thấy bất kỳ thiếu sót đáng kể nào trong công cụ này. Vì vậy, trừ khi bạn có nhiều tiện ích mở rộng cho log4j trong cơ sở mã của mình, tôi sẽ tiếp tục với việc đăng nhập lại.

1 hữu ích 0 bình luận chia sẻ
1

Tôi nghĩ rằng quyết định của bạn sẽ thuộc về cùng một quyết định nếu bạn quyết định sử dụng Log4j hoặc Jakarta Commons Logging - bạn có đang phát triển một thư viện sẽ được bao gồm trong các ứng dụng khác không? Nếu vậy, thì có vẻ không công bằng khi buộc người dùng thư viện của bạn cũng sử dụng thư viện đăng nhập mà bạn chọn.

Nếu câu trả lời là không, tôi sẽ chỉ đi với những gì đơn giản hơn để thêm và những gì bạn cảm thấy thoải mái hơn. Âm thanh như logback cũng có thể mở rộng và đáng tin cậy như log4j, vì vậy nếu bạn cảm thấy thoải mái khi sử dụng nó, hãy tiếp tục.

1 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java logging log4j logback , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading