现状
:一个在Java1.5JDK中开发的基于Struts的GUI应用程序,用于编译:1.7TomcatServer: Application托管在Tomcat 6上。当前的Log4J版本: 2.3构建工具: Maven 3
Aim
将Log4J升级到最新版本。
问题描述
在升级过程中,我尝试了多种方法,但tomcat和Java的所有组合都不同。但我遇到了不同的问题。以下是问题清单。
**JDK 7,Log4j-2.3 Tomcat 6(现状) **
能够构建war文件,应用程序被部署并顺利运行。
JDK 7和Tomcat 6,Log4j- 2.17.1
生成的war文件并不是拥有应用程序中的所有类。(相当令人惊讶)。我为maven启用了调试日志,但没有发现任何令人惊讶的条目。我将Log4j版本恢复到2.3,一切都恢复了正常。尝试了多次迭代,但仍然存在相同的问题。
JDK 8和Tomcat 6,Log4j- 2.17.1
我能够成功地构建war文件(与所有类一起),并将其部署到tomcat。但是当我打开webapp的登陆页面时,我会发现一个错误: java.io.ObjectInputStream类型无法解决。它是从必需的.class文件间接引用的。
在调查过程中,我了解到这并不是很多文章中提到的JDK 8中的一个bug,建议升级Tomcat版本。
JDK 8和Tomcat 8,Log4j- 2.17.1
成功地构建了war文件。在将它部署到Tomcat时,我们得到以下错误:
严重的localhost-startStop-1 org.apache.catalina.startup.ContextConfig.processAnnotationsJar无法处理Jar jar:file:/C:/xxxx/xxx/xxxx.war!/WEB-INF/lib/client-1.1.jar中的Jar条目xxxxxxxx.class,用于注释org.apache.tomcat.util.bcel.classfile.ClassFormatException:常量池中的无效字节标记: 60
根据调查和各种帖子,我们跳过了jar扫描,在tomcat的配置JarsToSkip文件中添加了catalina.properties。
JDK 8和Tomcat 8,Log4j- 2.17.1,有问题的Jar的带有jarsToSkip条目的catalina.properties
能够构建war文件,并将其部署到Tomcat。成功打开登录页。
当我提交登录表单时,应用程序遇到以下错误: java.lang.NoSuchMethodError: java.lang.NoSuchMethodError
查看文档和代码,方法的签名使一切看起来都很好。这个错误令人惊讶。
Tomcat还在正确的位置拥有catalina.jar、servlet-api.jar文件。
尝试使用更高的tomcat版本。
JDK 8,Tomcat 9,Log4j- 2.17.1,有问题的Jar的带有jarsToSkip条目的catalina.properties
再次显示相同的错误: java.lang.NoSuchMethodError: java.lang.NoSuchMethodError
**这次与Tomcat 10试过**
现在,使用这个版本的tomcat servlet,apis被打包在jakarta.servlet.*包中,而不是javax.servlet.*包中。
这将需要大量的代码更改和测试,因此我正在避免它。
我在找什么
您能帮助我理解一下,我尝试的整个过程是否正确,或者应该是JDK的changed?
请让我知道,如果你需要更多的细节围绕这件事,以便能够帮助。
P.S.:
我在Java、Struts、Maven、Tomcat工具方面很新,我可能错过了一些看似基本的解决方案。我愿意听取各种建议。
谢谢。
发布于 2022-05-05 06:00:26
您应该添加log4j-core和log4j-jc的依赖项,其次(在我的例子中)将log4j.properties移动到log4j2.properties
https://stackoverflow.com/questions/71232150
复制相似问题