单个项目中的 Java 库使用不同版本的 log4j

标签 java spring logging log4j

我的问题是我正在构建 spring-boot 项目并且我正在使用来自其他使用 log4j 1.2.8 的项目的 A 类。当我强制 spring 使用 log4j 1.2.8 时,出现以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jettyEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedJetty.class]: Initialization of bean failed; nested excepti
on is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.boot.autoconfigure.web.ServerProperties org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.properties; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverProperties' defined in class path resource [org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.class]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: TRACE

Spring 至少需要 log4j 1.2.12,所以当我使用这个版本的 log4j 时,我的 A 类有以下错误:

java.lang.NoSuchMethodError: org.apache.log4j.LogManager.exists(Ljava/lang/String;)Lorg/apache/log4j/Logger;

除了升级我的A类log4j,还有什么解决办法吗?也许有什么方法可以在运行时强制某些类应该使用 log4j 1.2.8 而其他类会使用 1.2.12?

最佳答案

OSGI是这样一种技术,您可以在一个 JVM 运行时中拥有同一个库的多个版本。

但是,在大多数情况下,它都有些矫枉过正。与其他人的建议相同,升级您的源代码会更便宜。

关于单个项目中的 Java 库使用不同版本的 log4j,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563882/

相关文章:

java - 如何确保 Java 对象(包含加密 Material )被归零?

java - 从 AlertDialog 输入向 RecyclerView 添加项目

java - 如何使用android studio设置正在运行的设备?

java - 将 Spring Boot JDBCTemplate 连接到 SQL Server (MSSQL)

java - java.util.logging 配置属性文件中的 log4j.appender.console.target 等效项

logging - Mosquitto 日志文件未生成

java - 在jmeter中测试带有 header 的HTTPs post请求并将测试结果保存在mongodb中并在grafana中显示

java - 永远不会调用 RestController 中 MethodArgumentNotValidException 的 Spring Boot ExceptionHandler

javascript - 我如何动态更新我的CSS,即我想给用户一个选择字体大小、背景颜色的选项

logging - 如何将自定义日志添加到 Visual Studio Team Services 构建的日志输出?