spring和log4j2问题

问题描述

将log4j从1.2.17升级到2.13.3时遇到以下问题。问题是当spring启动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时可以解决此问题,之后您可能还会看到更多信息。