Логер за Java библиотека

Пиша библиотека, която събира различни функции, които ще използвам в различни приложения. Искам да генерира лог отчети, видими за потребителя на библиотеката, т.е. ако създавам приложение и използвам библиотеката, искам библиотеката да генерира журнал отчети, видими за мен. Как да направя това? Тъй като регистрационният файл ще бъде конфигуриран от разработчика на приложението, как моята библиотека ще разбере как да влезе?


person João Daniel    schedule 16.03.2012    source източник
comment
Надникнете в пролетната рамка. По-конкретно, възможността за инжектиране на зависимости е частта, която е най-полезна за вас.   -  person cdeszaq    schedule 16.03.2012


Отговори (3)


Ако разработвате библиотека, която другите ще включат в своето приложение, трябва да използвате фасада за регистриране. В противен случай принуждавате потребителите на вашата библиотека да конфигурират и включат рамката за регистриране, която сте избрали в допълнение към рамката, която са избрали за своето приложение.

Например, ако използвате log4j, но програмистът, използващ вашата библиотека, използва logback, той ще трябва да включи конфигурационен файл log4j и log4j jar (или вземете други мерки), за да направите библиотеката си щастлива.

Фасадите за регистриране решават този проблем (от Apache Commons Logging):

Когато пишете библиотека, е много полезно да регистрирате информация. Въпреки това има много внедрявания на регистриране и една библиотека не може да наложи използването на конкретно такова върху цялостното приложение, от което библиотеката е част.

Пакетът Logging е ултратънък мост между различни реализации на регистриране. Библиотека, която използва общия API за регистриране, може да се използва с всяка реализация на регистриране по време на изпълнение. Commons-logging идва с поддръжка за редица популярни реализации на регистриране, а писането на адаптери за други е сравнително проста задача.

Или мотивите от SLF4J:

Простата фасада за регистриране за Java или (SLF4J) служи като проста фасада или абстракция за различни рамки за регистриране, напр. java.util.logging, log4j и logback, което позволява на крайния потребител да включи желаната рамка за регистриране по време на разгръщане.

Кандидатите за дървени фасади са:

Лично аз бих препоръчал SLF4JВход).

person Joe23    schedule 16.03.2012
comment
Вашият пример е подвеждащ. Разработчикът може да използва SLF4J API за код и log4j адаптер за трета страна едновременно. Тогава той просто избира някакъв бекенд на SLF4J като logback. Всъщност това е причината за SLF4J, толкова е просто. Не е необходима конфигурация на log4j. - person Rostislav Matl; 20.03.2012
comment
@RostislavMatl Говориш ли за модули за свързване на SLF4J (slf4j.org/legacy.html)? Те ви позволяват да използвате библиотека, която използва log4j,... вътрешно и да пренасочва нейните регистрационни съобщения към SLF4J (което може да бъде подкрепено от logback). Това със сигурност е страхотна функция, ако сте ПОТРЕБИТЕЛ на библиотека. Но когато сте РАЗРАБОТЧИТЕЛ на библиотека, защо трябва да принуждавате потребителите си да преминават през такива обръчи? Защо не използвате директно фасада? Както се посочва на страницата SLF4J, тези решения са подходящи за софтуер извън вашия контрол. Моля, поправете ме, ако съм ви разбрал погрешно. - person Joe23; 20.03.2012
comment
Явно говорим за различни неща. Вие написахте: ако използвате log4j, но разработчикът, използващ вашата библиотека, използва logback, той ще трябва да включи конфигурация log4j - това не е истина. И в същото време е лошо решение. Не съм казал, че не можете да използвате SLF4J, докато разработвате нов код. Избрах потребителската точка или изглед на библиотеката, защото по-често ще бъдете потребител, отколкото създател. - person Rostislav Matl; 21.03.2012
comment
@RostislavMatl А, сега разбирам. Написах той ще трябва да включи, а вие казвате, че има други решения, т.е. мостовият модул. Що се отнася до гледната точка, мисля, че ОП пише от гледна точка на създателя на библиотеката, така че отговорът ми също е написан по този начин. - person Joe23; 21.03.2012
comment
@RostislavMatl Актуализирах отговора си и добавих връзка към свързващи модули. Въпреки това не искам да наблягам твърде много на въпроса, тъй като според мен най-добрият подход при разработването на нова библиотека е да се използва директно фасада. Бихте ли се съгласили? - person Joe23; 21.03.2012
comment
Да, определено препоръчвам да използвате SLF4J с logback като бекенд и да унифицирате регистрирането на компоненти на трети страни, които влизат във вашата среда с помощта на адаптерите / мостовите модули. - person Rostislav Matl; 22.03.2012

Стандартните решения за това са:

Всички те ще ви позволят да конфигурирате местоположението на регистрационния файл чрез конфигурация.

person nwinkler    schedule 16.03.2012

Местоположението на вашия лог файл е зададено извън пакета, в конфигурация на рамка за регистриране. Конфигурационният файл обикновено е на classpath. Как изглежда зависи от рамката за регистриране, която използвате - препоръчвам да използвате SLF4J и Вход.

person Rostislav Matl    schedule 16.03.2012