Ответ 1
Как говорят журналы - Could not find necessary SLF4j logging jars.
Вам не хватает банок slf4j.
Поместите банку slf4j
в папку $CATALINA_BASE/lib
. Для получения дополнительной информации смотрите здесь
У меня большие проблемы с установкой Solr 4.3 под Ubuntu 12.04. Сначала я установил tomcat. Я могу получить доступ к tomcat через браузер на localhost: 8080. В "Tomcat Web Application Manager" я пытаюсь установить файл Solr 4.3 через файл 2solr.war. Файл загружен развернутым, но я не могу его запустить. "FAIL - приложение в контекстном пути /solr не может быть запущено".
Файл журнала (localhost.log
) выглядит так:
07.05.2013 11:05:36 org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: start: Starting web application at '/solr'
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext filterStart
SCHWERWIEGEND: Exception starting filter SolrRequestFilter
org.apache.solr.common.SolrException: 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
at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:105)
... 33 more
07.05.2013 11:05:36 org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext filterStart
SCHWERWIEGEND: Exception starting filter SolrRequestFilter
org.apache.solr.common.SolrException: 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
at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:105)
... 21 more
Catalina..... журнал
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Error filterStart
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Context [/solr] startup failed due to previous errors
07.05.2013 11:05:36 org.apache.catalina.startup.HostConfig checkResources
INFO: Reloading context [/solr]
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext stop
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/solr] has not been started
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Error filterStart
07.05.2013 11:05:36 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Context [/solr] startup failed due to previous errors
Может кто-нибудь помочь мне и рассказать мне, что делать?
Как говорят журналы - Could not find necessary SLF4j logging jars.
Вам не хватает банок slf4j.
Поместите банку slf4j
в папку $CATALINA_BASE/lib
. Для получения дополнительной информации смотрите здесь
Если вы не хотите копировать материал, вы можете изменить свою переменную CLASSPATH, чтобы включить все необходимые материалы.
Это пример того, что вы можете сделать:
cd /tmp
wget http://www.slf4j.org/dist/slf4j-1.6.6.zip
unzip slf4j-1.6.6.zip
mv slf4j-1.6.6/integration/lib slf4j
CLASSPATH="`find /tmp/slf4j/ -type f | xargs echo | sed 's/ /:/g'`"
Это даст вам что-то вроде:
# echo $CLASSPATH
/tmp/slf4j/slf4j-api-1.6.99.jar:/tmp/slf4j/slf4j-simple-1.6.99.jar:/tmp/slf4j/slf4j-simple-1.5.11.jar:/tmp/slf4j/slf4j-simple-1.4.2.jar:/tmp/slf4j/slf4j-api-1.5.11.jar:/tmp/slf4j/slf4j-simple-1.5.4-SNAPSHOT.jar:/tmp/slf4j/slf4j-nop-1.5.6.jar:/tmp/slf4j/slf4j-1.6.6.zip:/tmp/slf4j/slf4j-simple-1.5.0.jar:/tmp/slf4j/slf4j-api-2.0.99.jar
Вы можете установить переменную CLASSPATH в свой файл tomcat/etc/default/tomcat7 (или на RHEL distros/etc/tomcat7/tomcat7.conf). Итак, когда tomcat начинается, вы увидите что-то подобное в catalina.out:
SLF4J: Found binding in [jar:file:/tmp/slf4j/slf4j-nop-1.5.6.jar!/org/slf4j impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/slf4j/slf4j-simple-1.4.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/slf4j/slf4j-simple-1.5.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/slf4j/slf4j-simple-1.5.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/slf4j/slf4j-simple-1.5.4-SNAPSHOT.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/tmp/slf4j/slf4j-simple-1.6.99.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Я думаю, что настройка переменной - это намного более чистый способ поддерживать вашу систему, а затем копировать материал вокруг.
Если вы хотите, вы можете использовать libs из пакета slf4j (проверьте, где они установлены с dpkg -L libslf4j-java/rpm -ql slf4j, и возьмите банки из /usr/share/java ). Вам также будет полезно обновить slf4j (и другие libs, которые вы "включаете" через переменную CLASSPATH) с помощью системных инструментов (apt-get/yum).
Надеюсь, что это поможет.
PS. Если вы используете Debian/Ubuntu, есть еще один шаг - вам нужно изменить JAVA_OPTS, чтобы он содержал:
JAVA_OPTS="${JAVA_OPTS} -classpath ${CLASSPATH}"
для этого. Кажется, что Debian/Ubuntu не имеет конфигурационной переменной CLASSPATH как дистрибутивы на основе RHEL.
Вам нужно сделать именно то, что эти сообщения говорят в ваших файлах журнала:
Скопируйте баннеры журнала
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
.Если вы используете Jetty, баннеры журналов
SLF4j
должны войти в папку jetty lib/ext. Для других контейнеров следует использовать соответствующий каталог. Для получения дополнительной информации см.: http://wiki.apache.org/solr/SolrLogging
Другими словами, чтобы 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