SLF4J, Common Logging, консольный вывод - PullRequest
1 голос
/ 06 февраля 2011

У меня есть эта сторонняя библиотека, которая имеет:

  • slf4j-api-1.5.5.jar
  • slf4j-jdk14-1.5.5.jar
  • jcl-over-slf4j-1.5.5.jar

Я хочу написать несколько тестов для этой библиотеки и посмотреть ее вывод в журнал, и я не хочу добавлять больше библиотек журналов (нетlog4j или что-нибудь еще).

Я понимаю, что SLF4J и Common Logging являются абстракциями ведения журнала, поэтому мне, вероятно, нужно написать свой собственный простой конкретный регистратор (или, возможно, нет, поскольку jcl-over-slf4j включает org.apache.commons.logging.impl.SimpleLog?).Если да, то какие интерфейсы я должен реализовать, и что более важно, как мне настроить SL4J / Common Logging для использования моего регистратора в моем тесте?Я прочитал в документах SLF4J, что мне нужно изменить класс StaticLoggerBinder ... Означает ли это, что я действительно должен загрузить исходные коды SLF4J, изменить класс и перекомпилировать его?

Ответы [ 3 ]

9 голосов
/ 06 февраля 2011

Мы используем SLF4J. Это очень полезно, но у некоторых банок есть запутанные имена, и не совсем понятно, когда начинаешь узнавать, какие из них несовместимы.

SLF4J - это API, который вы используете для входа в свой код (например, log.info("blah"). Однако SLF4J не имеет никакого аспекта конфигурации. Во время выполнения вы добавляете ровно одну банку в путь к классам, который связывает API в «настоящую» подсистему ведения журнала. Если вы хотите использовать Log4J, добавьте slf4j-log4j.jar или jar StaticBinder для Simple или JDK , или Logback . Вы настраиваете любую из этих реализаций ведения журнала как обычно без SLF4J.

Существует несколько модулей SLF4J , доступных для перенаправления существующих операторов ведения журнала, написанных с использованием API-интерфейсов Log4J, Apache Commons Logging и java.util.logging в SLF4J. Это позволяет вам настроить единую конфигурацию регистрации для всех этих неэффективных реализаций. (Это очень полезно, чтобы избежать настройки, скажем, Log4J и JUL, если у вас есть библиотеки, которые привязываются напрямую к любой устаревшей инфраструктуре ведения журналов.)

Устаревшая страница SLF4J подробно объясняет эти понятия. Черт, есть даже модуль для перенаправления Sysout.out / err в SFL4J.

Чтобы более прямо ответить на ваш вопрос: уверен, что можете написать свою собственную реализацию ведения журнала, чтобы перейти под SLF4J; но единственная причина, по которой это возможно, заключается в том, что вы уже привязаны к какой-то доморощенной фреймворковой системе ведения журналов.

1 голос
/ 06 февраля 2011

Если вы хотите сохранить простоту, используйте встроенный (по состоянию на jdk 1.4) регистратор

http://download.oracle.com/javase/1.4.2/docs/api/java/util/logging/Logger.html

jar для связывания jar поставляется с slf4j.вы хотите убедиться, что jar развернут в вашем веб-приложении WEB-INF / lib dir или просто в вашем classpath в противном случае.См. (Slf4j.org/faq.html#where_is_binding) и это (slf4j.org/faq.html) для получения дополнительной информации.

jar, который вы хотите добавить в путь к классам, - slf4j-jdk14.jar.Обратите внимание, что jdk logger уже доступен, этот jar является связующим звеном между интерфейсами slf4j и выбранной реализацией logger.jar привязки журналирования поставляется с дистрибутивом slf4j.это должно сделать это для вас.

0 голосов
/ 06 февраля 2011

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

В любом случае вам не нужно реализовывать свой собственный класс Logger. Просто используйте slf4j-simple, который поставляется с SLF4J.

...