У меня есть webapp, работающий на Jetty 9.3.6 в ${jetty.base}
, который установлен в /opt/mybase/
. Мой веб-приложение использует slf4j
и я использую log4j
в качестве фактической основы регистрации, поэтому операторы лесозаготовительных в моем источнике WebAPP выглядит следующим образом:Jetty 9.1+: как получить мои журналы webapp с log4j/slf4j
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SillyClass
{
private static final Logger log = LoggerFactory.getLogger (SillyClass.class.getName());
...
public static void foo()
{
if (error())
{
log.error ("ERROR");
}
else
{
log.info ("NOT an error");
}
}
...
}
И в моем Gradle файл сборки, я сделал это:
dependencies {
...
compile 'org.slf4j:slf4j-api:1.7.12'
compile 'org.slf4j:slf4j-log4j12:1.7.12'
compile 'log4j:log4j:1.2.17'
...
}
Эта конфигурация хорошо работает для другого (не-Jetty, non-webapp) Java-проекта, который использует ту же систему ведения журнала; Я могу использовать ${project.home}/src/main/resources/log4j.properties
для управления выходом журнала.
В любом случае, когда я переехал в Джетти, я следил за инструкциями here до точки; но как только я это сделал, я ударил multiple-bindings error. Чтобы исправить это, я удалил slf4j
ссылки в моем Gradle файл сборки, но это привело к ошибке:
java.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader (instance of org/eclipse/jetty/webapp/WebAppClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of org/eclipse/jetty/start/Classpath$Loader) for the method's defining class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type org/slf4j/ILoggerFactory used in the signature
Я тогда удалил все ссылки на slf4j
и log4j
(закомментированный три линии я показываю в моей build.gradle
выше), но ошибка, которую я вижу, по-прежнему остается прежней. Что я делаю не так?
Мой /opt/mybase/resources/log4j.properties
файл:
log4j.rootLogger=TRACE, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=/opt/mybase/logs/jetty.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern= %d{dd MMM yyyy HH:mm:ss.SSS} %l %m%n
Любая помощь приветствуется.
Вы должны попробовать, используя только одну зависимость 'compile 'org.slf4j: slf4j-log4j12: 1.7.12'' вместо этого все три – nullpointer
Возможный дубликат http://stackoverflow.com/questions/14024756/slf4j-class -path-contains-multiple-slf4j-bindings – nullpointer
Это не работает: я больше не вижу никаких журналов. Я отредактировал свой OP для 'log4j.properties' Сообщение с несколькими связями возвращается, когда я удаляю' compile 'org.slf4j: slf4j-log4j12: 1.7.12''. – Sonny