2010-04-09 43 views
7

Google guice có một built-in logger binding. Nhưng điều gì sẽ xảy ra nếu tôi muốn sử dụng bộ ghi nhật ký commons-log hoặc log4j?Làm cách nào để có được google guice để chèn trình ghi nhật ký tùy chỉnh, hãy nói nhật ký ghi nhật ký hoặc log4j

Tôi có thể nhận Guice để tiêm một Log tạo ra bởi

LogFactory.getLog(CLASS.class) 

Nhưng có hành vi tương tự như trong xây dựng trong ràng buộc:

Các ràng buộc tự động đặt tên logger để tên của lớp mà Logger đang được tiêm ..


Nó có hợp lý không? Hoặc hét lên tôi chỉ đơn giản là sử dụng được xây dựng trong java Logger? Hoặc chỉ sử dụng commons-logging mà không cần tiêm?

+0

Không, có ý nghĩa. Log4j hỗ trợ nhiều mức ghi nhật ký hơn và có nhiều ứng dụng có sẵn hơn, vì vậy, muốn sử dụng nó thay vì trình ghi nhật ký dựng sẵn có ý nghĩa hoàn hảo với tôi. –

Trả lời

11

Trang CustomInjections trên wiki Guice mô tả chính xác cách chèn trình ghi nhật ký được đặt tên theo lớp mà nó được đưa vào.

+0

Liên kết đẹp. Loại một quá trình đau đớn, nhưng chức năng dù sao. –

+0

Cảm ơn bạn đã liên kết. Nó làm việc cho tôi. Tôi đã sử dụng chiến lược này để triển khai giải pháp SLF4J. –

+3

Đối với tất cả những ai nhầm lẫn về lớp InjectLogger trong ví dụ: Chỉ cần tạo một lớp Chú thích trống có tên là "InjectLogger" trong dự án của bạn. Nó không phải là một phụ thuộc bên ngoài (Đó là những gì tôi giả định đầu tiên). –

1

Đó là lựa chọn của bạn. Tôi đã sử dụng thành công logback với Guice bằng phương pháp được nêu chi tiết trên wiki.

Hãy xem dự án sli4j. Nó có thể hữu ích.

0

Guice rất hữu ích khi tiêm các triển khai khác nhau của giao diện. Đây không phải là trường hợp ở đây vì các triển khai ghi nhật ký khác nhau ở đó đều có các API khác nhau.

Nếu bạn muốn có thể trao đổi triển khai ghi nhật ký thực tế sau này trong khi phát triển dựa trên giao diện sử dụng commons logging hoặc slf4j.

+0

Hibernate sử dụng SLF4J và tôi tích hợp cả hai vào một ứng dụng dựa trên Guice mà không có bất kỳ vấn đề nào, vì vậy tôi có thể giới thiệu nó, mặc dù tôi đã không chơi với đăng nhập commons. –

0

Mặc dù bạn không thể ghi đè lên các quy java.util.logging.Logger logger, bạn liên kết một logger mới giống như bạn làm bất kỳ lớp khác:

bind(Log.class).to(LogFactory.getLog(YourClass)); // or toInstance(...); 

Nhưng, tạo ra một logger tên sẽ là khó khăn hơn một chút.

Nếu bạn tìm hiểu mã Google Guice (u til.BinderImpl.java:87), bạn có thể xem cách họ chỉ định một tên lớp riêng biệt cho từng trường hợp của trình ghi nhật ký được tiêm. Tuy nhiên, tôi đã không kiểm tra nó một cách cẩn thận, đủ để biết nếu nó dễ dàng tái sản xuất.

Có thể tạo nhà cung cấp hoặc bơm một nhà máy mà bằng cách nào đó có quyền truy cập vào ngữ cảnh để bạn có thể cung cấp trình ghi nhật ký có tên.

+0

Tôi không hiểu điều này. Nếu bạn định nghĩa rõ ràng YourClass trong chất kết dính, bạn sẽ nhận được các bản ghi của cùng một lớp cho toàn bộ ứng dụng. –

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