Tomcat 8如何启用调试日志以列出不必要的jar包

14

在 Arch Linux ARM 上启动 Tomcat 8 时,我收到以下警告:

INFO: 至少扫描了一个 JAR 文件以进行 TLD 扫描,但其中不包含 TLD。启用此记录器的调试日志功能,以获取扫描了但未找到 TLD 的 JAR 的完整列表。跳过不必要的 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.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = FINE org.apache.catalina.core.ContainerBase.[Catalina].[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路径。有什么问题吗?


https://dev59.com/DWcs5IYBdhLWcg3wXi5E - Konstantin V. Salikhov
可能是Tomcat 7 JSP编译器发出“不必要的JAR”警告的重复问题。 - kenorb
2
我不认为这是一个重复的问题。之前评论中的链接都没有解决这个问题。我也遇到了这个问题,即使我已经设置了我的logging.properties以生成JAR列表,消息仍然显示。 - tekNorah
4个回答

9

尝试通过以下方式对所有内容进行调试:

  1. Adding this to the end of your logging.properties file located in {CATALINA-HOME}/conf:

    #To see the most detailed level of logging for all classes, uncomment the following line:
    org.apache.catalina.level=FINEST
    
  2. Restart Tomcat

  3. Run the following from Terminal to get a list of jars that need to be skipped (courtesy of @joseph-lust on this post):

    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. Open skips.txt in your user home directory

  5. Add this list to {CATALINA-HOME}/conf/catalina.properties after the following line:

    org.apache.catalina.startup.TldConfig.jarsToSkip=
    
  6. Make sure to remove/comment out this when you are done to prevent your log files from growing too large

我仍然不确定为什么会发生这种情况,因为似乎对于大多数人来说,取消注释TldLocationsCache行是有效的。


5
在上面的帖子的第一步中,有一个更简单的方法,不是启用所有内容的调试,而是限制为org.apache.jasper:
请使用以下内容:
org.apache.jasper.level = FINEST

不要这样:

org.apache.catalina.level=FINEST

3
这应该是对原始答案的评论。 - Amr Eladawy

2
我写了一个脚本来查找所有不包含顶级域名的jar文件:
#!/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=

1
在原问题中提到的org.apache.jasper.servlet.TldScanner.level = FINE行应该足以获得不需要的JAR路径。可能是其他因素阻止了日志记录。
如果您正在使用Eclipse并在服务器选项卡上将Tomcat作为服务器运行,则可能需要进行一些额外配置才能正确读取logging.properties
  1. 如果Servers选项卡还未打开,请打开它(Window -> Show View -> Other... -> Server -> Servers)。如果Tomcat服务器正在运行,请停止它。
  2. 在Servers选项卡中,双击需要调整日志设置的Tomcat服务器。这将打开该服务器的概述选项卡。
  3. 在“通用信息”部分下,单击“打开启动配置”。这将弹出编辑配置框。
  4. 切换到“参数”选项卡。在VM参数部分,追加以下参数,将第一个参数调整为您的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这里提供的答案,对我很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接