2012-03-16 46 views
18

Tôi đang viết một thư viện tập hợp các chức năng khác nhau mà tôi sẽ sử dụng trong các ứng dụng khác nhau. Tôi muốn nó tạo ra các câu lệnh log hiển thị cho người dùng của thư viện, tức là, nếu tôi đang xây dựng một ứng dụng và tôi đang sử dụng thư viện, tôi muốn thư viện tạo các câu lệnh tường trình hiển thị cho tôi. Làm thế nào để làm điều đó? Vì tệp nhật ký sẽ được cấu hình bởi nhà phát triển ứng dụng, thư viện của tôi sẽ biết cách đăng nhập như thế nào?Trình ghi nhật ký cho thư viện Java

+0

Xem nhanh khung công tác Spring. Cụ thể, khả năng Dependency Injection là phần hữu ích nhất đối với bạn. – cdeszaq

Trả lời

23

Nếu bạn đang phát triển một thư viện những người khác sẽ bao gồm trong ứng dụng của họ, bạn nên sử dụng một đăng nhập mặt tiền. Nếu không, bạn buộc người dùng thư viện của mình định cấu hình và bao gồm khung đăng nhập bạn đã chọn ngoài khung họ đã chọn cho đơn đăng ký của họ.

Ví dụ nếu bạn sử dụng log4j nhưng nhà phát triển sử dụng thư viện của bạn sử dụng logback ông sẽ phải bao gồm một tập tin cấu hình log4j và jar log4j (hoặc mất other measures) để làm cho thư viện của bạn hạnh phúc.

Mặt tiền Logging giải quyết vấn đề này (từ Apache Commons Logging):

Khi viết một thư viện nó rất hữu ích để ghi lại thông tin. Tuy nhiên có nhiều triển khai ghi nhật ký ngoài đó và một thư viện không thể áp dụng việc sử dụng một ứng dụng cụ thể trên ứng dụng tổng thể mà thư viện là một phần của.

Gói ghi nhật ký là một cầu nối siêu mỏng giữa các triển khai ghi nhật ký khác nhau. Một thư viện sử dụng API ghi nhật ký có thể được sử dụng với bất kỳ triển khai ghi nhật ký nào khi chạy. Commons-logging đi kèm với sự hỗ trợ cho một số triển khai ghi nhật ký phổ biến và việc viết các bộ điều hợp cho người khác là một nhiệm vụ đơn giản hợp lý.

Hoặc lập luận từ SLF4J:

Các Logging mặt tiền đơn giản cho Java hay (SLF4J) đóng vai trò như một mặt tiền đơn giản hay trừu tượng cho các khuôn khổ khai thác gỗ khác nhau, ví dụ java.util.logging, log4j và logback, cho phép người dùng cuối cắm vào khung khai thác mong muốn tại thời điểm triển khai.

Các ứng cử viên cho mặt tiền ghi là:

Cá nhân tôi muốn giới thiệu SLF4J (với Logback).

+0

Ví dụ của bạn là gây hiểu lầm. Nhà phát triển có thể sử dụng API SLF4J cho bộ mã và bộ chuyển đổi log4j cho bên thứ ba cùng một lúc. Sau đó, anh ta chỉ chọn một số phụ trợ SLF4J như logback. Trong thực tế đây là một lý do cho SLF4J, nó rất đơn giản. Không cần cấu hình log4j. –

+0

@RostislavMatl Bạn đang nói về SLF4J "mô-đun cầu nối" (http://www.slf4j.org/legacy.html)? Chúng cho phép bạn sử dụng một thư viện sử dụng log4j, ... nội bộ và chuyển hướng các thông điệp tường trình của nó tới SLF4J (có thể được hỗ trợ bởi logback). Đây chắc chắn là một tính năng tuyệt vời nếu bạn là NGƯỜI DÙNG của một thư viện. Tuy nhiên, khi bạn là người phát triển của một thư viện, tại sao bạn buộc người dùng phải nhảy qua các vòng lặp như vậy? Tại sao không sử dụng mặt tiền trực tiếp? Khi trang SLF4J tuyên bố các giải pháp này là "thích hợp cho phần mềm ngoài tầm kiểm soát của bạn". Xin vui lòng sửa tôi nếu tôi đã hiểu lầm bạn. – Joe23

+0

Dường như chúng ta nói về những thứ khác nhau. Bạn đã viết: "nếu bạn sử dụng log4j nhưng nhà phát triển sử dụng thư viện của bạn sử dụng logback anh ta sẽ phải bao gồm một cấu hình log4j" - đó không phải là sự thật. Và đó là một giải pháp tồi tệ cùng một lúc. Tôi không nói là bạn không thể sử dụng SLF4J khi phát triển mã mới. Tôi đã chọn điểm hoặc điểm người dùng thư viện vì bạn sẽ thường xuyên hơn người dùng, sau đó là người tạo. –

2

Vị trí tệp nhật ký của bạn được đặt bên ngoài gói, trong cấu hình khung ghi nhật ký. Tệp cấu hình thường là trên classpath. Làm thế nào nó trông phụ thuộc vào khung khai thác gỗ bạn sử dụng - Tôi khuyên bạn nên đi với SLF4JLogback.

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