2012-03-16 3 views
18

Я пишу библиотеку, которая собирает различные функции, которые я буду использовать в разных приложениях. Я хочу, чтобы он генерировал операторы журналов, видимые для пользователя библиотеки, то есть, если я создаю приложение, и я использую библиотеку, я хочу, чтобы библиотека создавала видимые для меня операторы журналов. Как мне это сделать? Поскольку файл журнала будет настроен разработчиком приложения, как моя библиотека будет знать, как регистрироваться?Logger for Java library

+0

Посмотрите на весну рамки. В частности, функция Injection Dependency - это наиболее полезная для вас часть. – cdeszaq

ответ

23

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

Например, если вы используете log4j но разработчик, используя вашу библиотеку использует Logback он должен будет включать в файл конфигурации log4j и log4j банку (или взять other measures), чтобы сделать вашу библиотеку счастливым.

Logging Фасады решить эту проблему (Apache Commons Logging):

При написании библиотеки это очень полезно для регистрации информации. Однако существует множество реализаций протоколирования, и библиотека не может навязывать использование конкретного приложения в общем приложении, частью которого является библиотека.

Пакет регистрации - это ультратонкий мост между различными реализациями каротажа. Библиотека, использующая API регистрации общедоступных данных, может использоваться с любой реализацией протоколирования во время выполнения. Commons-logging поставляется с поддержкой нескольких популярных реализаций ведения журнала, а для написания адаптеров для других - достаточно простая задача.

Или рассуждения из SLF4J:

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

Кандидаты на лесозаготовительных фасадов являются:

Лично я бы рекомендовал SLF4JLogback).

+0

Ваш пример вводит в заблуждение. Разработчик может использовать API SLF4J для кода и адаптера log4j для третьей стороны одновременно. Затем он просто выбирает бэкэнд SLF4J, например, журнал. На самом деле это причина SLF4J, это так просто. Конфигурация log4j не требуется. –

+0

@RostislavMatl Вы говорите о SLF4J «мостовых модулях» (http://www.slf4j.org/legacy.html)? Они позволяют использовать библиотеку, которая использует log4j, ... внутренне и перенаправляет свои сообщения журнала на SLF4J (что может быть поддержано в результате регистрации). Это, безусловно, отличная возможность, если вы являетесь ПОЛЬЗОВАТЕЛЕМ библиотеки. Однако, когда вы являетесь разработчиком библиотеки, почему вы вынуждаете своих пользователей перепрыгивать через такие обручи? Почему бы не использовать фасад напрямую? Как говорится на странице SLF4J, эти решения «подходят для программного обеспечения, находящегося за пределами вашего контроля». Пожалуйста, поправьте меня, если я вас неправильно понял. – Joe23

+0

Видимо мы говорим о разных вещах. Вы написали: «Если вы используете log4j, но разработчик, использующий вашу библиотеку, использует logback, он должен будет включить конфигурацию log4j» - это не правда. И это плохое решение одновременно. Я не говорил, что вы не можете использовать SLF4J при разработке нового кода. Я выбрал точку пользователя библиотеки или представление, потому что вы будете чаще пользователем, а затем создателем. –

2

Местоположение вашего файла журнала устанавливается за пределами пакета, в конфигурации фреймворка. Файл конфигурации обычно находится в пути к классам. Как это выглядит, зависит от того, какую структуру ведения журнала вы используете. Я рекомендую пойти с SLF4J и Logback.