Tomcat 8 включает ведение журнала отладки, чтобы вывести список ненужных jar-файлов

При запуске Tomcat 8 в Arch Linux ARM я получаю следующее предупреждение:

ИНФОРМАЦИЯ: По крайней мере один JAR был отсканирован на предмет TLD, но не содержал TLD. Включите ведение журнала отладки для этого регистратора, чтобы получить полный список сканированных JAR-файлов, но в них не было обнаружено TLD. Пропуск ненужных файлов JAR во время сканирования может улучшить время запуска и время компиляции JSP.

Я уже изменил $ {catalina.home} /logging.properties, как описано здесь: Как исправить предупреждение компилятора JSP: один JAR был проверен на предмет TLD, но не содержал TLD?

Я изменил некоторые уровни ведения журнала с INFO на FINE, оставил комментарий "org.apache.jasper.compiler.TldLocationsCache.level = FINE" и добавил "org.apache.jasper.servlet.TldScanner.level = FINE". Итак, конец файла теперь выглядит следующим образом:

org.apache.catalina.core.ContainerBase. [Catalina]. [localhost].level = FINE org.apache.catalina.core.ContainerBase. [Catalina]. [localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase. [Catalina]. [localhost]. [/ manager].level = FINE org.apache.catalina.core.ContainerBase. [Каталина]. [localhost]. [/ manager].handlers = 3manager.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase. [Catalina]. [localhost]. [/ host-manager].level = FINE org.apache.catalina.core.ContainerBase. [Каталина]. [localhost]. [/ host- manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler

# Например, установите в регистраторе org.apache.catalina.util.LifecycleBase журнал # каждого компонента, который расширяет состояние изменения LifecycleBase: # org.apache.catalina.util.LifecycleBase.level = FINE

# Чтобы увидеть сообщения отладки в TldLocationsCache, раскомментируйте следующую строку: org.apache.jasper.compiler.TldLocationsCache.level = FINE org.apache.jasper.servlet.TldScanner.level = FINE

Но я все равно получаю предупреждение при запуске, а не ненужные пути JAR. В чем дело?

3 ответа

Попробуйте отладку для всего:

  1. Добавление этого в конец вашего logging.properties файл находится в {CATALINA-HOME}/conf:

    #To see the most detailed level of logging for all classes, uncomment the following line:
    org.apache.catalina.level=FINEST
    
  2. Перезапустите Tomcat

  3. Запустите следующее из терминала, чтобы получить список jar-файлов, которые нужно пропустить (любезно предоставлено @joseph-lust в этом посте):

    egrep "No TLD files were found in \[file:[^\]+\]" {CATALINA-HOME}/logs/catalina.out -o | egrep "[^]/]+.jar" -o | sort | uniq | sed -e 's/.jar/.jar,\\/g' > ~/skips.txt
    
  4. открыто skips.txt в вашем домашнем каталоге пользователя

  5. Добавить этот список в {CATALINA-HOME}/conf/catalina.properties после следующей строки:

    org.apache.catalina.startup.TldConfig.jarsToSkip=
    
  6. Обязательно удалите / закомментируйте это, когда вы закончите, чтобы ваши файлы журналов не становились слишком большими

Я до сих пор не уверен, почему это происходит, так как, похоже, большинство работает, чтобы раскомментировать TldLocationsCache линия.

Более простой способ, на шаге 1 вышеописанного поста, вместо того, чтобы разрешить отладку для всего, ограничить org.apache.jasper:

Использовать этот:

org.apache.jasper.level = FINEST

Вместо этого:

org.apache.catalina.level=FINEST

Я написал скрипт, чтобы найти все банки, которые не содержат TLD:

#!/bin/sh
TOMCAT_HOME=/opt/tomcat
for i in `find $TOMCAT_HOME -follow -name "*jar"`
do
    jar tvf $i | grep -i tld > /dev/null
    if [ $? -ne 0 ]; then
        echo "$(basename $i),\\"
    fi
done

Отредактируйте TOMCAT_HOME, чтобы он соответствовал вашей установке. Сценарий создает список в форме:

jar1.jar,\
jar2.jar,\
...

которые могут быть вставлены в catalina.properties по адресу:

org.apache.catalina.startup.TldConfig.jarsToSkip=

В org.apache.jasper.servlet.TldScanner.level = FINEстроки, упомянутой в исходном вопросе, должно быть достаточно, чтобы получить пути ненужных JAR. Предположительно, что-то еще мешает работе лога.

Если вы используете Eclipse и запускаете Tomcat в качестве сервера на вкладке "Серверы", для правильного чтения может потребоваться дополнительная конфигурация. logging.properties.

  1. Откройте вкладку Серверы, если она еще не открыта (Окно> Показать вид> Другое...> Сервер> Серверы). Остановите сервер Tomcat, если он работает.
  2. На вкладке "Серверы" дважды щелкните сервер Tomcat, для которого необходимо настроить параметры ведения журнала. Это должно открыть вкладку Обзор для сервера.
  3. В разделе "Общая информация" нажмите "Открыть конфигурацию запуска". Это должно вызвать всплывающее окно редактирования конфигурации.
  4. Перейдите на вкладку Аргументы. В разделе аргументов виртуальной машины добавьте следующие аргументы, настроив первый аргумент на путь к вашему logging.properties файл:
    • -Djava.util.logging.config.file="C:\REPLACE\WITH\PATH\TO\TOMCAT\conf\logging.properties"
    • -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
  5. Запустите Tomcat и найдите в консоли следующие строки:
01-Dec-2020 20:18:32.069 FINE [main] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan No TLD files were found in [file:/C:/projects/so/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/webapps/so_proj/WEB-INF/lib/gson-2.8.1.jar]. Consider adding the JAR to the tomcat.util.scan.StandardJarScanFilter.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.

Кредит на ответ Steve Mitchell здесь, который мне помог.

Другие вопросы по тегам