2015-04-24 35 views
7

Tôi bắt đầu với một Dự án mới và đã thực hiện một số cân nhắc về việc đăng nhập. Tôi luôn luôn sử dụng các mô hình mà mọi tầng lớp, trong đó khai thác gỗ được thực hiện, có Logger tĩnh của riêng mình:Ghi nhật ký Java - Trình bao bọc?

private static final Logger logger = Logger.getLogger(LoggingInterceptor.class); 

tôi không thực sự thích cách tiếp cận này như tôi phải sao chép dòng này vào mỗi lớp nơi tôi sẽ đăng một cái gì đó . Tôi đã xem xét sử dụng phương pháp tiếp cận Android, nơi có lớp Log với các phương thức tĩnh để đăng nhập. Tôi bắt đầu tìm kiếm trên internet cho một cách tiếp cận tương tự được thực hiện bởi người khác, nhưng không tìm thấy bất cứ điều gì.

Vì vậy, câu hỏi của tôi là: Điều gì có thể là bất lợi của phương pháp này?

Tôi không thể nghĩ ra bất kỳ lợi ích nào khác, vì nó tuân theo mẫu DRY. Các danh mục khác nhau có thể được xử lý như trong Android với 'thẻ', là các tham số của phương thức Đăng nhập tĩnh. Ví dụ:

Log.debug(tag, message, exception); 

Bản thân lớp bản ghi sẽ sử dụng Khung đăng nhập chung như Log4j hoặc thậm chí SLF4J.

Vì vậy, tôi quan tâm đến ý kiến ​​của bạn.

+0

FWIW, Khung chơi 2 sử dụng cách tiếp cận tương tự. – smk

+2

"[...] nó tuân theo mẫu DRY"? Au contraire! Cách tiếp cận được đề xuất của bạn buộc bạn luôn phải chỉ định thẻ, trong khi truy xuất trình ghi nhật ký cho lớp (hoặc danh mục) trong biến cuối cùng tĩnh chỉ định nó một lần. Khi bạn quyết định thay đổi danh mục thì sao? – Seelenvirtuose

+0

Vâng, đó có thể là một điểm. Nhưng nếu bạn đăng nhập một câu lệnh cho một thẻ khác thì sao? Xem xét các thẻ không chỉ được sử dụng để xác định lớp nơi đăng nhập được đặt, nhưng có thể là một hệ thống phụ của hệ thống. Vì vậy, bạn có thể muốn đóng gói một số nhật ký của các hệ thống phụ được thực hiện trên nhiều lớp. – homedom

Trả lời

2

Dựa trên java.util.logging.Logger APIthis article, lý do chính cho getLogger() là để đảm bảo cùng LoggerHandler bộ được sử dụng một cách độc lập giữa hệ thống con.

Giải pháp được đề xuất của Java là lấy số Logger ở đầu mỗi tệp và sau đó đăng nhập vào đối tượng đó mỗi lần bạn cần.

Sử dụng một tĩnh Log.debug sẽ đòi hỏi tag để được xử lý mỗi lần sao cho đúng Handler bộ đã được sử dụng. Do đó, nó sẽ kém hiệu quả hơn so với việc có đối tượng Đăng nhập đã sẵn sàng.

Tuy nhiên, nếu bạn không sử dụng handlers hoặc không phân biệt giữa các hệ thống con, thì các hàm tĩnh sẽ là một lối tắt hợp lý, miễn là thư viện được sử dụng phù hợp với nhu cầu của bạn.

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