Ghi nhật ký Java so với Log4J [đã đóng]


134

Có còn đáng để thêm thư viện log4j vào dự án Java 5 chỉ để đăng nhập, hãy nói một số ngoại lệ đối với một tệp có một số cài đặt cuộn qua đẹp. Hoặc các cơ sở tiêu chuẩn ing.logging sẽ làm công việc là tốt?

Bạn nghĩ sao?


Xem stackoverflow.com/a/13144054/603516 để biết nhiều vấn đề khóa log4j 1.2 được xem xét.
Vadzim

Câu trả lời:


115

Tôi muốn nói rằng bạn có thể ổn với ing.logging cho các nhu cầu bạn mô tả.

Để có một cây quyết định tốt, hãy xem Log4j vs java.util.logging

Câu hỏi thứ nhất: Bạn có dự đoán được nhu cầu đối với bất kỳ trình xử lý thông minh nào mà Log4j có mà JUL không có, chẳng hạn như SMTPHandler, NTEventLogHandler hoặc bất kỳ Trình xử lý tệp nào rất thuận tiện không?

Câu hỏi thứ hai: Bạn có thấy bản thân muốn thường xuyên chuyển đổi định dạng của đầu ra đăng nhập không? Bạn sẽ cần một cách dễ dàng, linh hoạt để làm như vậy? Nói cách khác, bạn có cần PatternLayout của Log4j không?

Câu hỏi thứ ba: Bạn có dự đoán được nhu cầu nhất định về khả năng thay đổi cấu hình ghi nhật ký phức tạp trong các ứng dụng của mình không, sau khi chúng được biên dịch và triển khai trong môi trường sản xuất? Cấu hình của bạn có nghe giống như không, "Tin nhắn nghiêm trọng từ lớp này được gửi qua e-mail đến người hỗ trợ, tin nhắn nghiêm trọng từ một tập hợp con của lớp được đăng nhập vào syslog deamon trên máy chủ của chúng tôi; tin nhắn cảnh báo từ một tập hợp con khác của lớp được ghi lại vào một tệp trên ổ đĩa mạng A, và sau đó tất cả các tin nhắn từ mọi nơi được đăng nhập vào một tệp trên ổ đĩa mạng B "? Và bạn có thấy mình điều chỉnh nó cứ sau vài ngày không?

Nếu bạn có thể trả lời có cho bất kỳ câu hỏi nào ở trên, hãy đi với Log4j. Nếu bạn trả lời không nhất định cho tất cả trong số họ, JUL sẽ đầy đủ hơn và nó đã được đưa vào SDK một cách thuận tiện.

Điều đó nói rằng, gần như mọi dự án ngày nay dường như kết thúc bao gồm log4j, nếu chỉ vì một số thư viện khác sử dụng nó.


1
Câu hỏi lớn dựa trên câu trả lời. Để mỗi mình dựa trên nhu cầu.
HopeKing

43

Tôi khuyên bạn nên sử dụng Mặt tiền ghi nhật ký đơn giản cho Java (SLF4J). Nó hỗ trợ các nhà cung cấp khác nhau bao gồm Log4J và có thể được sử dụng thay thế cho Ghi nhật ký Commons của Apache.


6
Có gì sai với Đăng nhập Commons?
Bart van Heukelom

5
@Bart van Heukelom và bình luận upvoters - đọc bài
Stephen C

4
@Stephen C: Cảm ơn thông tin, mặc dù tôi đã biết rằng một thời gian trước đây và hiện đang sử dụng SLF4J bất cứ khi nào tôi có thể. (Nhận xét của tôi là một câu hỏi thực sự btw, không phải là một nhận xét bảo thủ)
Bart van Heukelom

1
@Bart, Commons Logging sử dụng khám phá động của gói để sử dụng. SLF4J sử dụng (hoặc đã từng) cần các lớp trong phần phụ trợ để tải tất cả.
Thorbjørn Ravn Andersen

21

Log4j đã có từ lâu, và nó hoạt động rất tốt. Tôi không có nghiên cứu khoa học để hỗ trợ nó, nhưng dựa trên những gì tôi đã thấy ở một số lượng lớn khách hàng, nó dễ dàng là khung đăng nhập mà tôi thấy được sử dụng nhiều hơn bất kỳ khách hàng nào khác. Nó đã tồn tại trong một thời gian dài và không được thay thế bởi Khung đăng nhập lớn tiếp theo, có nội dung gì đó.

Thật đơn giản để thiết lập và dễ dàng tìm hiểu các phần bổ sung cơ bản (đầu ra). Có rất nhiều máy chủ lưu trữ có sẵn, bao gồm:

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. Ứng dụng tập tin
  5. Ứng dụng JDBC
  6. Ứng dụng JMS
  7. NTEventLogAppender
  8. Cán bộ ứng dụng
  9. Ứng dụng SMTP
  10. Ổ cắm ứng dụng
  11. SyslogAppender
  12. TelnetAppender
  13. Nhà văn ứng dụng

Cộng với những người khác. Không khó để viết appender của riêng bạn. Ngoài ra, có rất nhiều tính linh hoạt trong mỗi ứng dụng cho phép bạn kiểm soát cụ thể đầu ra trong nhật ký của bạn là gì.

Một lưu ý, tôi đã có một loạt các vấn đề về trình nạp lớp khi tôi sử dụng đăng nhập apache commons ngoài log4j. Nó chỉ dành cho một ứng dụng cụ thể, nhưng tôi thấy việc sử dụng log4j đơn giản hơn là sử dụng tính linh hoạt khi sử dụng lớp trừu tượng như ghi nhật ký chung.

Xem bài viết này để biết thêm chi tiết :

Chúc may mắn!


17

java.util.logging cung cấp gói ghi nhật ký toàn diện mà không có hành lý quá mức mà một số người khác cung cấp ..


5
Thêm vào đó, nó được bao gồm theo mặc địnhđược sử dụng bởi chính Java (vì vậy dù sao bạn cũng sẽ có nó!)
Có QUIT - Anony-Mousse

7

log4j là một gói đẹp hơn về tổng thể và không có một số trục trặc mà java.util.logging chứa. Tôi muốn thứ hai rằng sử dụng log4j trực tiếp dễ dàng hơn sử dụng ghi nhật ký chung.


3
Bạn có thể vui lòng cụ thể hơn về các trục trặc mà java.util.logging có không?
kiềm

Chắc chắn, giống như chi phí trong việc ghi nhật ký các phương thức được đồng bộ hóa: xem github.com/playframework/playframework/issues/6958bug.openjdk.java.net/browse/JDK-8077846
Sẽ Sargent

4

Tôi khuyên bạn nên sử dụng Apache Commmons Logging làm giao diện ghi nhật ký của bạn. Bằng cách đó, bạn có thể linh hoạt chuyển đổi việc triển khai ghi nhật ký bất cứ lúc nào bạn muốn mà không yêu cầu bất kỳ thay đổi mã nào về phía bạn.


3

Tôi sẽ đi với log4j. Các possibilites với log4j hoàn toàn không lỗi thời!

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.