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 ответа
Попробуйте отладку для всего:
Добавление этого в конец вашего
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
Перезапустите Tomcat
Запустите следующее из терминала, чтобы получить список 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
открыто
skips.txt
в вашем домашнем каталоге пользователяДобавить этот список в
{CATALINA-HOME}/conf/catalina.properties
после следующей строки:org.apache.catalina.startup.TldConfig.jarsToSkip=
- Обязательно удалите / закомментируйте это, когда вы закончите, чтобы ваши файлы журналов не становились слишком большими
Я до сих пор не уверен, почему это происходит, так как, похоже, большинство работает, чтобы раскомментировать 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
.
- Откройте вкладку Серверы, если она еще не открыта (Окно> Показать вид> Другое...> Сервер> Серверы). Остановите сервер Tomcat, если он работает.
- На вкладке "Серверы" дважды щелкните сервер Tomcat, для которого необходимо настроить параметры ведения журнала. Это должно открыть вкладку Обзор для сервера.
- В разделе "Общая информация" нажмите "Открыть конфигурацию запуска". Это должно вызвать всплывающее окно редактирования конфигурации.
- Перейдите на вкладку Аргументы. В разделе аргументов виртуальной машины добавьте следующие аргументы, настроив первый аргумент на путь к вашему
logging.properties
файл:-Djava.util.logging.config.file="C:\REPLACE\WITH\PATH\TO\TOMCAT\conf\logging.properties"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
- Запустите 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 здесь, который мне помог.