log4j2 - spring 和 log4j2 的问题
问题描述
将 log4j 从 1.2.17 升级到 2.13.3 时遇到以下问题。问题是spring boot bean的时候告诉我没有引入log4j jar。
发现是因为spring默认使用commons-logging作为日志输出,所以引入了jar slf4j和log4j-slf4j-impl,但是问题还是没有解决
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataUploadServiceImpl' defined in URL [jar:file:/E:/WorkSpace/git/dmc_idx/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/DMC-IDX-CORE/WEB-INF/lib/dmc-idx-service-1.0.1-SNAPSHOT.jar!/com/ai/dmc/index/service/dataupload/DataUploadServiceImpl.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/log4j/Priority
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:397) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1429) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.0.RELEASE.jar:5.2.0.RELEASE]
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Priority
at com.ai.frame.logger.LoggerFactory.getUtilLog(LoggerFactory.java:93) ~[control-2.5.jar:?]
at com.ai.frame.logger.LoggerFactory.getUtilLog(LoggerFactory.java:134) ~[control-2.5.jar:?]
at com.ai.frame.bean.Entity.<clinit>(Entity.java:20) ~[control-2.5.jar:?]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_73]
at java.lang.Class.forName(Class.java:264) ~[?:1.8.0_73]
at com.sun.proxy.$Proxy36.<clinit>(Unknown Source) ~[?:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_73]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_73]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_73]
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[?:1.8.0_73]
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:739) ~[?:1.8.0_73]
at org.springframework.aop.framework.JdkDynamicAopProxy.getProxy(JdkDynamicAopProxy.java:123) ~[spring-aop-5.0.0.RELEASE.jar:5.0.0.RELEASE]
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110) ~[spring-aop-5.0.0.RELEASE.jar:5.0.0.RELEASE]
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:473) ~[spring-aop-5.0.0.RELEASE.jar:5.0.0.RELEASE]
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:355) ~[spring-aop-5.0.0.RELEASE.jar:5.0.0.RELEASE]
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization
这是 pom.xml 的详细信息:
<dependency>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</ groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.3</version>
</dependency>
解决方案
您需要添加 log4j-1.2-api jar。但是, com.ui.frame.logger.LoggerFactory.getUtilLog 可能无法正常运行,因为它仍然被编码为使用 Log4j 1,所以虽然添加 jar 可以解决这个问题,但之后您仍然可能会看到更多。
推荐阅读
- java - 如何使用 Java 注释设置 Spring Integration Collaborating Channel 适配器?
- tensorflow - 导出自定义 Keras 模型以使用 Cloud ML Engine 进行预测
- java - 线程“主”java.lang.UnsatisfiedLinkError 中的异常:java.library.path 中没有 IBScanUltimate
- ios - 无法在 tableview 自定义单元格中获取文本字段文本
- sql - Azure SQL 在 KeyVault 上始终加密密钥轮换 - 它是如何工作的?
- pandas - 我们可以根据聚合标准对熊猫数据框进行采样吗
- angular - Angular 6 - 在生产中部署应用程序
- python - 列表中的嵌套循环
- awk - awk - 删除了一个字段,但无法摆脱它的分隔符
- azure - ARM 模板部署期间出现“KeyVault 参数 '' 的资源标识符无效”错误