博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring mvc log日志由log4j桥接至log4j2
阅读量:3785 次
发布时间:2019-05-22

本文共 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/

你可能感兴趣的文章
python 运行不过去SyntaxError: Non-ASCII character '\xc2' in file
查看>>
常用颜色值
查看>>
opencv_traincascade.exe用到的参数及解释
查看>>
opencv_traincascade.exe文件结构解析
查看>>
TrainCascade类图解析
查看>>
STL中vector的capacity、size、reserve、resize
查看>>
SIFT特征检测与RANSAC过滤
查看>>
Opencv中FAST特征检测
查看>>
BRIEF特征匹配
查看>>
ORB特征检测与匹配
查看>>
BRISK特征匹配
查看>>
FREAK特征匹配
查看>>
Opencv中的MSER特征
查看>>
机器学习实战第二章——KNN算法(源码解析)
查看>>
机器学习实战第三章——决策树(源码解析)
查看>>
正则表达式
查看>>
机器学习实战第四章——朴素贝叶斯分类(源码解析)
查看>>
图像积分图的计算
查看>>
LBP特征原理及代码实现
查看>>
Robust Object Tracking via Sparsity-based Collaborative Model
查看>>