Как исправить отсутствие в Tomcat отсутствующих лог-файлов SLF4j?
Я получаю эту ошибку при попытке запустить новое приложение с помощью Tomcat:
Could not find necessary SLF4j logging jars. If using Jetty, the SLF4j logging jars need to go in the jetty lib/ext directory. For other containers, the corresponding directory should be used. For more information, see: http://wiki.apache.org/solr/SolrLogging
Я не использую Jetty, я использую Tomcat, поэтому мои инструкции по установке немного отличаются.
Я проверил ссылку и много читал об этом - похоже, что библиотеки должны идти в $CATALINA_BASE/lib - что в моем случае должно быть:
/usr/local/easy/share/easy-tomcat7/lib
Однако я положил туда библиотеки - без кубиков.
Это каталог lib:
./ commons-io-2.3.jar jsp-api.jar slf4j-api-1.7.6.jar tomcat-juli-adapters.jar
../ el-api.jar jul-to-slf4j-1.7.7.jar slf4j-api-1.7.7.jar tomcat-juli.jar
annotations-api.jar httpclient-4.3.1.jar log4j.jar@ slf4j-log4j12-1.7.7.jar tomcat-util.jar
catalina-ant.jar httpcore-4.3.jar log4j-over-slf4j-1.7.7.jar tomcat-api.jar wstx-asl-3.2.7.jar
catalina-ha.jar httpmime-4.3.1.jar log4j.properties tomcat-coyote.jar zookeeper-3.4.6.jar
catalina.jar jasper-el.jar log4j.properties.bak tomcat-i18n-es.jar
catalina-tribes.jar jasper.jar noggit-0.5.jar tomcat-i18n-fr.jar
commons-collections.jar@ jasper-jdt.jar@ servlet-api.jar tomcat-i18n-ja.jar
commons-dbcp.jar@ jcl-over-slf4j-1.7.7.jar slf4j-1.7.7/ tomcat-jdbc.jar
Как видите, все библиотеки должны быть там.
Так, что вызывает это? Я не в том каталоге Tomcat? Разве я не получил правильные файлы? Мне не хватает какой-то настройки конфигурации? Я почти полностью потерян здесь.
2 ответа
Не очень хорошая идея иметь две версии библиотеки API slf4j в вашем classpath. У вас есть slf4j-api-1.7.6.jar и slf4j-api-1.7.7.jar.
Кроме того, у вас должна быть соответствующая библиотека реализации slf4j в вашем classpath.
Обратитесь к документации по slf4j, чтобы получить более подробную информацию о том, как включить slf4j в ваше приложение.
Чтобы ваш Solr с Tomcat работал правильно, вам необходимо:
Скопируйте банки журналирования SLF4j из
<solr>/example/lib/ext/*.jar
в Tomcat Lib (например,TOMCAT_HOME/lib
,/usr/share/tomcat/lib
) или каталог Webapp Lib (например,TOMCAT_HOME/webapps/solr/WEB-INF/lib
). Эти банки будут устанавливать SLF4J и log4j.Для сервера Debian или Ubuntu, использующего пакет Tomcat, доступный у поставщика ОС, это может быть
/usr/share/tomcat6/lib
или же/usr/share/tomcat7/lib
,Например:
# cp -v /opt/solr-4.10.4/example/lib/ext/*.jar /usr/share/tomcat?/lib/
или же:
# cp -v /opt/solr-4.10.4/example/lib/ext/*.jar /var/lib/tomcat7/webapps/solr/WEB-INF/lib/
В качестве альтернативы настройте свой
CLASSPATH
чтобы указать на ваши файлы JAR.Скопируйте конфигурацию регистрации из
solr/example/resources/log4j.properties
в место на пути к классам. Обычно вы можете использовать то же местоположение, что и файлы jar выше, и отредактировать файл конфигурации для вашего предпочтительного места назначения журнала.Опционально, если вы не разместили
log4j.properties
на пути к классам установите параметр Java:-Dlog4j.configuration=file:///path/to/log4j.properties
Перезапустите Tomcat (например,
sudo /etc/init.d/tomcat7 restart
).
Если у вас все еще есть проблемы, это может помочь запустить сервер с -Dlog4j.debug=true
чтобы увидеть больше деталей.
См.: Использование примера настройки ведения журнала в контейнерах, отличных от Jetty