当前位置: 首页 > 知识库问答 >
问题:

Tomcat 8启用调试日志以列出不需要的JAR

西门嘉澍
2023-03-14

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

信息:至少有一个罐子扫描了TLD,但没有TLD。启用此记录器的调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以改善启动时间和JSP编译时间.`

我已经修改了${catalina.home}/logging.properties,如下所述:如何修复JSP编译器警告:一个JAR扫描了TLD,但没有TLDs?

我将一些日志级别从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记录器设置为log#每个扩展LifecycleBase的组件更改状态:#org.apache.catalina.util.LifecycleBase.level=FINE

#要查看TldLocationsCache中的调试消息,请取消对以下行的注释:org.apache.jasper.compiler.TldLocationsCache.level=FINE org.apache.jasper.servlet.tldScanner.level=FINE

但我仍然在启动时得到警告,而不是不需要的JAR路径。怎么了?

共有2个答案

胡高寒
2023-03-14

一个更简单的方法是,在上面文章的第1步中,不是对所有内容启用调试,而是限制为org.apache.jasper:

使用此:

org.apache.jasper.level = FINEST

而不是这样:

org.apache.catalina.level=FINEST
东门修能
2023-03-14

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

>

  • 将此添加到{CATALINA-HOME}/conf中的logging.properties文件的结尾:

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

    重新启动Tomcat

    从Terminal运行以下操作以获得需要跳过的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行的注释似乎对大多数人都有用。

  •  类似资料:
    • 我使用的是Couchbase SDK和Spring boot 2.6.x版本。我使用的是spring spring-data-couch base:jar:4 . 4 . 0,它又有com . couch base . client:Java-client:jar:3 . 3 . 0依赖项。问题是,当尝试执行cluster.query()方法时,我需要查看正在执行什么查询。我需要启用调试日志。然而

    • 要开启调试日志,首先需要在配置nginx时打开调试功能,然后编译: https://www.wenjiangs.com/doc/BZ7EWB2Econfigure --with-debug ... 然后在配置文件中设置error_log的级别为debug: error_log /path/to/log debug; nginx的windows二进制版本总是将调试日志开启的,因此只需要设

    • 问题内容: 我目前正努力在具有复杂对象的tomcat上进行HTTP会话复制。 一些对象实现但包含不可序列化的成员。 不幸的是,默认情况下,堆栈跟踪没有在此处提供很多有用的信息。 有一个标志-XX:??? 在发生NotSerializableException时在堆栈跟踪中 启用详细的类名 。该标志将帮助我找到错误的来源。但我忘了它的名字 标志的名字是什么? 问题答案: -Dsun.io.seria

    • 我想设置日志级别、文件名和日志文件的文件路径。我找到了一种方法来实现这一点,除了log4j创建一个附加的日志文件外,其他方法都可以实现。我得到了下面的log4j2。xml: 在我的主函数中,我设置了${sys:logDir}和${sys:logFilename}: 它像我想要的那样工作,但是log4j在我的主项目路径中创建了一个名为“${sys:logDir}${sys:logFilename}”

    • 是否有一种方法可以为JaVers启用调试日志,这样我就可以获得比这更多的细节?

    • 调试日志 接下来的我们介绍的第二个插件是调试日志插件,该插件相对第一个复杂一些,但是因为不涉及到什么复杂的算法,还是很容易看懂的。 该插件针对输入输出处理器和调用处理器都有实现。 TypeScript 版本 import { ByteStream } from '@hprose/io'; import { Context, NextIOHandler, NextInvokeHandler } fr