【问题标题】:Web application does not deploy correctly after upgrade to macOS High Sierra升级到 macOS High Sierra 后 Web 应用程序无法正确部署
【发布时间】:2018-01-12 12:35:00
【问题描述】:

我有一个在 macOS Sierra 下的 Tomcat 8 中运行良好的 Web 应用程序。但是,我最近升级到 high sierra,然后应用程序部署失败。在catalina.out中可以看到如下日志,

11-Jan-2018 14:43:02.288 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
11-Jan-2018 14:43:02.306 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/connect] startup failed due to previous errors

然后是 logger 上无限循环的堆栈跟踪,在 localhost.log 中看到 stackoverflow 错误,如下所示。该错误没有给出问题所在的任何线索(例如 bean 未正确连接等),因此很难进行故障排除。

11-Jan-2018 14:43:02.288 SEVERE [localhost-startStop-1] 
org.apache.catalina.core.StandardContext.listenerStart Exception sending 
context initialized event to listener instance of class 
org.springframework.web.context.ContextLoaderListener
 java.lang.StackOverflowError
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
    at org.apache.log4j.Category.<init>(Category.java:57)
    at org.apache.log4j.Logger.<init>(Logger.java:37)
    at org.apache.log4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:43)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:45)

有人见过这个问题吗?

感谢您提供的任何提示。

【问题讨论】:

  • 再次查看堆栈跟踪后,它似乎表明与记录器相关的依赖周期问题,即。 log4j -> slf4j -> log4j。然后我检查了 Web 应用程序库中与记录器相关的 jar 文件,我发现了“log4j-over-slf4j-1.7.22.jar”和“slf4j-log4j12-1.7.5.jar”。然后我删除了“slf4j-log4j12-1.7.5.jar”,事情开始起作用了!我很高兴解决了这个问题,但我仍然不明白为什么在升级到 High Sierra 之前它会起作用。

标签: java tomcat web-applications macos-high-sierra


【解决方案1】:

我会尝试几件事 - 干净安装项目,清洁 tomcat 工作目录。检查 JAR 的版本,看看是否有任何不匹配!

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2017-06-10
    • 2018-03-28
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    相关资源
    最近更新 更多