Чи слід увійти з бібліотечного коду?


38

Якщо я розробляю бібліотеку Java, чи є правильною практикою видавати заяви журналу з коду бібліотеки?

Вхід у бібліотеку зробить налагодження та усунення несправностей більш прозорими. Однак, з іншого боку, мені не подобається засмічувати свій код бібліотеки операторами журналу. Чи є також якісь наслідки для продуктивності?


Відповіді:


33

Так, слід. Використання фасаду журналу на зразок SLF4J надає вам гнучкість, не обтяжуючи користувачів певними рамками реєстрації.

Автори широко розповсюджених компонентів та бібліотек можуть кодувати інтерфейс SLF4J, щоб уникнути нав'язування рамки реєстрації кінцевому користувачу компонента або бібліотеки. Таким чином, кінцевий користувач може вибрати бажаний фреймворк журналу під час часу розгортання, вставивши на класний шлях відповідну прив'язку slf4j, яка може бути змінена пізніше, замінивши наявну прив'язку іншою на шляху до класу та перезапустивши додаток. Цей підхід виявився простим і дуже надійним.

Крім того, якщо ваші користувачі не містять банку SLF4J (з посібника користувача ):

Як і для SLF4J версії 1.6.0, якщо на шляху до класу не знайдено прив'язки, то slf4j-api буде за замовчуванням для виконання без операцій, відкидаючи всі запити журналу.

Якщо ви стурбовані наслідками ефективності ведення журналу, ознайомтеся з цим запитанням щодо поширених питань у SLF4J . Ідея полягає в тому, щоб ви надали параметри для журналу операторів, а не додавали їх до рядка:

Наступні два рядки дадуть точно такий же вихід. Однак друга форма випереджає першу форму на коефіцієнт щонайменше 30, якщо вимкнено оператор реєстрації.

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

SLF4J - це ще один фасад лісозаготівлі?

SLF4J концептуально дуже схожий на JCL. Таким чином, це можна вважати ще одним фасадом лісозаготівлі. Однак SLF4J набагато простіший у дизайні та, можливо, більш надійний. Коротше кажучи, SLF4J уникає проблем із завантажувачем класів, які викликають напади [Jakarta Commons Logging].


Чи є хороша бібліотека з відкритим кодом, яка записує код бібліотеки, на який можна вказати? щоб ми могли бачити, як це робиться?
користувач1870400

Spring Framework - це досить відома бібліотека Java, яка робить це; у їхньому випадку вони обрали JCL.
Майк Партрідж

17

Так , слід увійти з коду бібліотеки. Це не тільки допомагає вам розвиватися, але люди, які користуються бібліотекою, вважають її корисною. Пам’ятайте, що ви завжди можете встановити рівні журналу таким чином, щоб показувати лише потрібні оператори журналу - і вони можуть робити те саме.

Нещодавно я використовував Mybatis , інструмент ORM з відкритим кодом. Я налагоджував проблему, де запит, який я вважав, що повинен бути правильним, не давав результатів. Це був параметризований запит, і оскільки Mybatis здійснює вхід у свій код бібліотеки, я зміг увімкнути його і побачити запущений фактичний запит. Неважко було сказати, що я поміняв два параметри. Без входу в бібліотеку я не міг би знайти проблему так само швидко.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.