Как упаковать webapp при использовании slf4j / logback? - PullRequest
7 голосов
/ 23 ноября 2010

У меня много веб-приложений для сборки / упаковки, и я хотел бы поделиться их общими библиотеками.

Что касается ведения журнала, я хотел бы связать slf4j-api с каждым приложением, но рассмотрим реализацию, предоставленную моим контейнером (который в данный момент является tomcat)

Для этого я скопировал два jar, logback-classic и logback-core в каталог $ CATALINA \ lib.

К сожалению, во время выполнения связывание между slf4j и его реализацией завершается неудачно со следующим сообщением об ошибке:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Единственный способ, которым мне удалось заставить его работать, - это связать банку с военными файлами.

Есть идеи?

Ответы [ 3 ]

8 голосов
/ 23 ноября 2010

Это не будет работать, как ожидалось.Каркасы журналирования используют много статических переменных (или глобальных переменных).

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

Объедините реализацию журнала с вашей WAR, чтобы веб-контейнер мог убедиться, что каждое веб-приложение получает свой собственный набор глобальных переменных.

[EDIT] Если выЕсли вы действительно хотите контролировать все приложения с одинаковой конфигурацией журнала, вы должны переместить все классы журнала в контейнер.Это включает в себя slf4j.

Я настоятельно рекомендую поместить конфигурацию журнала в JAR и поместить ее туда же.Или разверните одно фиктивное веб-приложение, которое содержит как можно меньше кода (чтобы Tomcat его загрузил) плюс logback.xml

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

1 голос
/ 23 ноября 2010

уважали ли вы

Размещение одного (и только одного) файла slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar или logback-classic.jar на пути к классам должен решить проблему.

?

если вы используете, например, hibernate, он может ввести slf4j-log4j12.jar в ваш путь к классам, поэтому в вашем пути к классам может быть более одной реализации slf4j

для меня это работает с slf4j и log4j

0 голосов
/ 10 сентября 2014

Мы поместили весь jar для Slf4j и Logback в shared / lib Tomcat. Затем мы помещаем глобальный logback.xml в shared / classes.

Но я до сих пор не знаю, хорошая ли это практика. Мы должны управлять журналом пользователя, поэтому мы устанавливаем MDC для использования SiftingAppender. У меня есть вопрос, который ждет ответа на эту тему: (

...