记一次Tomcat日志分析:一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
1 问题
我将一个应用,MicroStrategy-11.3.0000.13515,部署到Tomcat。
然后,我点击start后报错:
FAIL - Application at context path [/MicroStrategy-11.3.0000.13515] could not be started
2 解决方案
如果你谷歌报错信息的话,你会发现造成这个报错信息的场景有很多。换而言之,这个报错信息不明确。
比如这个问题:FAIL - Application at context path /Hello could not be started
其原因是web.xml的标签没闭合:
Your web.xml ends with <web-app>, but must end with </web-app>
接下来我们要寻找更为明确的报错信息。
在logs/目录下寻找日志文件。
cat catalina.log
日志如下:
15-Sep-2020 21:42:36.518 信息 [http-nio-8080-exec-9] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
15-Sep-2020 21:42:36.520 严重 [http-nio-8080-exec-9] org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
15-Sep-2020 21:42:36.521 严重 [http-nio-8080-exec-9] org.apache.catalina.core.StandardContext.startInternal 由于之前的错误,Context[/MicroStrategy-11.3.0000.13515]启动失败
很可惜这个日志还不够详细。
注意下面这句:
一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件
参考这篇博客:one or more listeners failed. Full details will be found in the appropriate container log file
在tomcat的webapps/MicroStrategy-11.3.0000.13515/WEB-INF/classes目录下,添加一个日志配置文件:logging.properties,里面的内容为:
org.apache.catalina.core.ContainerBase.[Catalina].level=INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers=java.util.logging.ConsoleHandler
再次启动项目,然后查看catalina.log
额外的关键信息信息是:
java.lang.UnsupportedClassVersionError: com/microstrategy/utils/log/SessionListener has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (无法载入的.类 [com.microstrategy.utils.log.SessionListener])
你如果对JVM/jdk熟悉的话,你就知道jdk版本和class file版本是一一对应的。
JDK 1.11 = 55
JDK 1.8 = 52
JDK 1.7 = 51
JDK 1.6 =50
com/microstrategy/utils/log/SessionListener
是由更新jdk11编译的,对应class file版本55,但是当前jdk只能编译最高版本52的class file。
所以问题的根源在于当前jdk的版本过低。
升级当前机器的jdk至11后重启tomcat。
MicroStrategy-11.3.0000.13515已经自动被部署到tomcat。
3 讨论
- 日志是王道。
- 熟悉tomcat的一些原理、术语。