Подтвердить что ты не робот

Как исправить Solr Исключение: Не удалось найти необходимые лог файлы SLF4j?

У меня большие проблемы с установкой 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

Может кто-нибудь помочь мне и рассказать мне, что делать?

4b9b3361

Ответ 1

Как говорят журналы - Could not find necessary SLF4j logging jars.

Вам не хватает банок slf4j.

Поместите банку slf4j в папку $CATALINA_BASE/lib. Для получения дополнительной информации смотрите здесь

Ответ 2

Если вы не хотите копировать материал, вы можете изменить свою переменную 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.

Ответ 3

Вам нужно сделать именно то, что эти сообщения говорят в ваших файлах журнала:

Скопируйте баннеры журнала 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