2009-01-20 33 views
23

Tôi có một số câu hỏi về ghi nhật ký, cụ thể hơn về cách thiết lập và đảm bảo nó hoạt động.Đăng nhập bằng SL4J, Jakarta Commons logging, log4j cho thư viện của bên thứ ba và mã của riêng tôi

Dự án tôi đang thực hiện sẽ sử dụng Wicket, SpringHibernate. Tôi biết rằng Wicket và Hibernate sử dụng Simple Logging Facade cho Java (SL4J) và Spring đang sử dụng logging component from Apache Commons.

Họ có cùng tồn tại một cách vui vẻ không? Tôi nghĩ rằng tôi sẽ sử dụng log4j cùng với cả SL4J và thành phần ghi nhật ký từ Apache commons, bạn có nghĩ đó là một ý tưởng hay không?

Tôi có thể thiết lập tất cả dữ liệu ghi nhật ký đầu ra thành tệp chung không? Hoặc tôi có nên sử dụng các tệp riêng biệt không? Hoặc tôi có nên lưu trữ các thông điệp ghi nhật ký trong cơ sở dữ liệu không? (Tôi không muốn, vì tôi tìm kiếm các tệp văn bản khá tiện lợi.)

Cho mùa xuân, tôi cần một số loại tệp cấu hình cho thành phần ghi nhật ký Apache Commons.

Khi tôi đã thiết lập những điều này, tôi đoán rằng mọi thứ hoạt động tôi đặt mức ghi nhật ký thành INFO vì nó khá chắc chắn rằng cả ba khung công tác đều xuất một số thông tin trong chế độ đó? Hoặc có cách nào tốt hơn để đảm bảo không?

Và câu hỏi cuối cùng của tôi. Trong dự án tôi bắt đầu, bạn có khuyên tôi nên sử dụng SL4J cho mục đích ghi nhật ký của riêng mình không? (Tôi nghĩ tôi sẽ sử dụng log4j trực tiếp, nhưng đó là trước khi tôi học thêm một chút về việc đăng nhập và rất nhiều thư viện đáng kính dường như chọn đường dẫn của cầu/mặt tiền cho nhu cầu khai thác gỗ của họ. chi phí không có lý do để không làm điều đó theo cách đó.)

Tôi mong muốn được nghe nhiều hơn về bạn về cách bạn đang thực hiện việc ghi nhật ký của mình. Đó là một lĩnh vực mới cho tôi mà tôi mong muốn cải thiện bản thân mình.

Trả lời

20

Vâng SLF4J chỉ là một mặt tiền, như đăng nhập commons, có nghĩa là họ vẫn cần một cái gì đó khác để làm việc. Chúng cho phép các tác giả thư viện không buộc người dùng phải có nhiều thư viện và cấu hình đăng nhập. Log4j và logback là các thư viện ghi nhật ký thường xuyên.

Xem here để biết thêm thông tin.

SLF4J có một số commons logging bridge mà bạn có thể sử dụng để thay thế thư viện ghi nhật ký commons. Tôi nghĩ rằng các lược đồ có giải thích tình hình rất tốt.

Bây giờ, bạn chỉ cần sử dụng slf4j-logj12.jar để có đăng nhập commons và slf4j sử dụng log4j (hoặc bất kỳ thứ gì bạn đã chọn; btw, logback không cần thư viện bổ sung để sử dụng với slf4j) động cơ.

Bạn ứng dụng như vậy sẽ có

  • jcl104-over-slf4j.jar (để cầu commons jakarta đăng nhập để SLF4J)
  • slf4j.jar (đối với hibernate và người khác sử dụng slf4j)
  • slf4j -logj12.jar (để slf4j sử dụng log4j làm phụ trợ)
  • log4j.jar (để ứng dụng của bạn sử dụng.tất cả các cấu hình cũng sẽ được thực hiện ở đây)
+2

Hãy nhớ không nhầm lẫn slf4j-xxxx.jar với xxxx-over-slf4j.jar. Trước đây là để chuyển đến khung đăng nhập mong muốn của bạn (log4j, logback, vv), sau này là thay thế khung đăng nhập đã sử dụng. –

+1

Và sử dụng cả hai có thể tạo ra một vi phạm trong vải không gian thời gian! – Loki

+14

Dừng sự điên rồ. Có ai khác nghĩ rằng khai thác gỗ đã trở nên quá phức tạp? Tôi nghĩ log4j là một điều tuyệt vời, xứng đáng được làm một tiêu chuẩn. Tôi không theo dõi lịch sử JCP đủ chặt chẽ để biết tại sao Sun quyết định đi theo con đường riêng của họ. Chuyện này thật vớ vẩn. Tôi sử dụng ACL + log4j. – duffymo

13

Sau đây là cách để chuyển hướng tất cả mọi thứ để SLF4J:

  • loại bỏ commons-logging.jar từ classpath của bạn. Nếu bạn đang sử dụng Maven và gặp khó khăn khi thoát khỏi việc ghi nhật ký, hãy xem this.

  • đặt jcl-over-slf4j.jar trong classpath của bạn (có trong bản phân phối SLF4J). Đây là một thay thế drop-in bắt chước các lớp của JCL, nhưng gọi SLF4J nội bộ. Điều này sẽ chăm sóc Spring và bất kỳ khung công tác nào khác sử dụng JCL.

Kết nối SLF4J với chương trình phụ trợ yêu thích của bạn (Log4J, Logback ...) bằng cách đặt slf4j-xxx.jar trong đường dẫn lớp. Định cấu hình chương trình phụ trợ để ghi lại tất cả các danh mục vào một tệp và bạn đã hoàn tất.

Đối với việc sử dụng SLF4J trong ứng dụng của bạn, điều đó là không cần thiết. Các thư viện như JCL và SLF4J ban đầu được thiết kế cho những người viết thư viện và không muốn khóa khách hàng của họ vào một khung đăng nhập cụ thể.

PS: bằng cách này, JCL = Jakarta Commons Logging

+0

Cảm ơn! Tôi đã thay đổi thành JCL trong OP. –

+0

Bạn có ý gì bằng cách "onfigure phụ trợ để ghi lại tất cả các danh mục vào một tệp"? Bạn có thể cung cấp thêm chi tiết không? – Glenn

+1

Để loại trừ việc ghi lại dấu phẩy khỏi bản dựng cuối cùng của bạn trong phạm vi sử dụng maven 'được cung cấp' thay vì 99.0-không-tồn tại từ Eric. –

Các vấn đề liên quan