本文共 7695 字,大约阅读时间需要 25 分钟。
spring mvc的日志系统可以配置很多版本,比如log4j、log4j2、logback等等,在参考资料中介绍了Spring mvc如何直接集成log4j2,我们这里介绍的是,如何将原系统中的log4j改为使用log4j2.
1. 删除原Spring mvc中对log4j的依赖
log4j log4j
2、添加log4j2的依赖,其中og4j2的版本我选择的是, <log4j2.version>2.11.2</log4j2.version>,其中jul(java util logging)jcl (apache commons-logging)的依赖可以不用添加
org.apache.logging.log4j log4j-api ${log4j2.version} org.apache.logging.log4j log4j-core ${log4j2.version} org.apache.logging.log4j log4j-jcl ${log4j2.version} org.apache.logging.log4j log4j-jul ${log4j2.version} org.apache.logging.log4j log4j-web ${log4j2.version}
3、 添加log4j到log4j2的桥接包
org.apache.logging.log4j log4j-1.2-api ${log4j2.version}
4、添加log4j2的配置文件 log4j2.xml, 内容根据自己喜好更改,下面这个只是作为参考(直接在resources目录底下添加)
logs/
5、最重要的,其他的都不需要更改,比如mybatis-config.xml保留原样即可,不要将logImpl的value改为LOG4J2,不然,如果mybatis的版本如果过低的话,会报一些错误,比如:
Cause: org.apache.ibatis.logging.LogException: Error setting Log implementation. Cause: java.lang.reflect.InvocationTargetException at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)Caused by: org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [mybatis-config.xml]; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.logging.LogException: Error setting Log implementation. Cause: java.lang.reflect.InvocationTargetException at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:434) at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:340) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ... 21 moreCaused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.logging.LogException: Error setting Log implementation. Cause: java.lang.reflect.InvocationTargetException at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:109) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:92) at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:428) ... 24 moreCaused by: org.apache.ibatis.logging.LogException: Error setting Log implementation. Cause: java.lang.reflect.InvocationTargetException at org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:131) at org.apache.ibatis.logging.LogFactory.useCustomLogging(LogFactory.java:83) at org.apache.ibatis.session.Configuration.setLogImpl(Configuration.java:213) at org.apache.ibatis.builder.xml.XMLConfigBuilder.settingsElement(XMLConfigBuilder.java:218) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:103) ... 26 moreCaused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:127) ... 30 moreCaused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/spi/AbstractLoggerWrapper at org.apache.ibatis.logging.log4j2.Log4j2AbstractLoggerImpl.(Log4j2AbstractLoggerImpl.java:39) at org.apache.ibatis.logging.log4j2.Log4j2Impl. (Log4j2Impl.java:34) ... 35 more
1、如果spring mvc中,log4j使用的是slf4j+log4j的模式,那么在执行上面第一步的时候,除了删除log4j的依赖外,还需要删除slf4j-log4j12的依赖
log4j log4j slf4j-log4j12 org.slf4j
在添加log4j2的依赖过程中,增加log4j2到slf4j的依赖包
org.apache.logging.log4j log4j-slf4j-impl ${log4j2.version}
2、简单介绍一下log4j2中依赖包的作用
log4j-api:log4j2定义的API
log4j-core:log4j2上述API的实现
log4j-1.2-api:将log4j日志转接到log4j2的转接包
log4j-jcl:commons-logging到log4j2的桥梁
log4j-jul:java util logging 到log4j2的桥梁
log4j-web: 保证容器关闭或取消部署Web应用程序时,正确清理日志资源(关闭数据库连接,关闭文件等)
log4j-slf4j-impl:slf4j到log4j2的桥梁
转载地址:http://nfktn.baihongyu.com/