Bạn có nên đăng nhập từ mã thư viện?


38

Nếu tôi đang phát triển một thư viện Java, có phải là cách tốt để phát hành các câu lệnh log từ bên trong mã của thư viện không?

Việc đăng nhập trong thư viện sẽ giúp việc gỡ lỗi và xử lý sự cố trở nên minh bạch hơn. Tuy nhiên, mặt khác, tôi không thích xả rác mã thư viện của mình bằng các báo cáo đăng nhập. Có bất kỳ ý nghĩa hiệu suất để xem xét là tốt?


Câu trả lời:


33

Có bạn nên. Sử dụng mặt tiền ghi nhật ký như SLF4J mang lại cho bạn sự linh hoạt mà không gây gánh nặng cho người dùng của bạn với khung đăng nhập cụ thể.

Tác giả của các thành phần và thư viện được phân phối rộng rãi có thể mã hóa giao diện SLF4J để tránh áp đặt khung đăng nhập cho người dùng cuối của thành phần hoặc thư viện. Do đó, người dùng cuối có thể chọn khung ghi nhật ký mong muốn tại thời điểm triển khai bằng cách chèn liên kết slf4j tương ứng trên đường dẫn lớp, có thể được thay đổi sau đó bằng cách thay thế một ràng buộc hiện có bằng một liên kết khác trên đường dẫn lớp và khởi động lại ứng dụng. Cách tiếp cận này đã được chứng minh là đơn giản và rất mạnh mẽ.

Ngoài ra, nếu người dùng của bạn không bao gồm bình SLF4J (từ hướng dẫn của người dùng ):

Kể từ phiên bản SLF4J 1.6.0, nếu không tìm thấy ràng buộc nào trên đường dẫn lớp, thì slf4j-api sẽ mặc định thực hiện không hoạt động loại bỏ tất cả các yêu cầu nhật ký.

Nếu bạn lo ngại về ý nghĩa hiệu suất của việc đăng nhập, hãy xem mục Câu hỏi thường gặp về SLF4J này . Ý tưởng là bạn cung cấp các tham số để ghi nhật ký thay vì thêm chúng vào chuỗi nội tuyến:

Hai dòng sau sẽ mang lại đầu ra chính xác. Tuy nhiên, biểu mẫu thứ hai sẽ tốt hơn biểu mẫu thứ nhất với hệ số ít nhất là 30, trong trường hợp câu lệnh ghi nhật ký bị vô hiệu hóa.

logger.debug("The new entry is "+entry+".");
logger.debug("The new entry is {}.", entry);

SLF4J có phải là một mặt tiền đăng nhập khác?

SLF4J về mặt khái niệm rất giống với JCL. Như vậy, nó có thể được coi là một mặt tiền đăng nhập khác. Tuy nhiên, SLF4J đơn giản hơn nhiều trong thiết kế và mạnh mẽ hơn nhiều. Tóm lại, SLF4J tránh các vấn đề về trình nạp lớp gây ra [Nhật ký Jakarta Commons].


Có một thư viện mã nguồn mở tốt đăng nhập trong mã thư viện mà bạn có thể trỏ đến không? Vì vậy, chúng ta có thể thấy nó được thực hiện như thế nào?
dùng1870400

Khung công tác Spring là một thư viện Java khá nổi tiếng thực hiện điều này; trong trường hợp của họ, họ đã chọn JCL.
Mike Partridge

17

, bạn nên đăng nhập từ mã thư viện của bạn. Nó không chỉ giúp bạn phát triển mà những người sử dụng thư viện sẽ thấy nó hữu ích. Hãy nhớ rằng bạn luôn có thể đặt các mức ghi nhật ký chỉ hiển thị các báo cáo nhật ký bạn cần - và chúng có thể làm tương tự.

Gần đây tôi đang sử dụng Mybatis , một công cụ ORM mã nguồn mở. Tôi đã gỡ lỗi một vấn đề trong đó một truy vấn mà tôi nghĩ lẽ ra phải chính xác là không trả lại kết quả. Đó là một truy vấn được tham số hóa và vì Mybatis đã đăng nhập trong mã thư viện của nó, tôi có thể bật nó lên và xem truy vấn thực tế đang được chạy. Thật dễ dàng để nói rằng tôi đã trao đổi hai tham số. Không đăng nhập vào thư viện tôi không thể tìm thấy vấn đề gần như nhanh chóng.

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.