解决springmvc整合Mybatis的Log4j⽇志输出问题
springmvc整合Mybatis的Log4j⽇志输出
当我们进⾏web开发的时候总是看到配置的log4j⽇志在控制台⽆法显⽰mybatis的主要是指sql、参数、结果,出现这种问题有两种情况:
第⼀种情况
下⾯⽂档描述的mybatis本⾝内置很多种⽇志框架使⽤,所以如果我们要⽤具体哪个⽇志框架,就需要进⾏相应mybatis配置,或者就是按照mybatis本⾝规则运⾏。
配置⽅式:新增⽂件,有就直接添加l
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-////DTD Config 3.0//EN"
"/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
</configuration>
再把这个⽂件添加到:
<!--(主库)整合相应的MyBatis持久层相应的插件并注册相应的MyBatis模板 (dataSource1 主库数据源)-->
<bean id="sqlSessionFactory" class="batis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dynamicDataSource" />
<property name="configLocation" value="l"></property><!-- 配置mybatis的⽇志记录 -->
<property name="mapperLocations" value="classpath*:com/belle/finance/**/**/daomapper/mapper/*l"/>
</bean>
这样就配置好了,使⽤log4j进⾏⽇志记录不会运⾏mybatis⾃⾝规则。
第⼆种情况
就是log4j的⽇志级别使⽤错误,导致mybatis信息打印不出来;
⽇志级别
每个Logger都被了⼀个⽇志级别(log level),⽤来控制⽇志信息的输出。⽇志级别从⾼到低分为:
A:off 最⾼等级,⽤于关闭所有⽇志记录。
B:fatal 指出每个严重的错误事件将会导致应⽤程序的退出。
C:error 指出虽然发⽣错误事件,但仍然不影响系统的继续运⾏。
D:warm 表明会出现潜在的错误情形。
E:info ⼀般和在粗粒度级别上,强调应⽤程序的运⾏全程。
F:debug ⼀般⽤于细粒度级别上,对调试应⽤程序⾮常有帮助。
G:all 最低等级,⽤于打开所有⽇志记录。
上⾯这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使⽤4个级别,优先级从⾼到低分别是error,warn,info和debug。通过使⽤⽇志级别,可以控制应⽤程序中相应级别⽇志信息的输出。例如,如果使⽤b了info级别,则应⽤程序中所有低于info级别的⽇志信息(如debug)将不会被打印出来。
根据上⾯的log4j的说明,另外根据mybatis的细粒度得出,mybatis要把log4j的⽇志⾄少配置到DEBUG级别,才能显⽰出sql⽇志,如下:
log4j.logger.demo.user=DEBUG
Mybatis内置的⽇志⼯⼚提供⽇志功能,具体的⽇志实现有以下⼏种⼯具:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
具体选择哪个⽇志实现⼯具由MyBatis的内置⽇志⼯⼚确定。它会使⽤最先到的(按上⽂列举的顺序查)。如果⼀个都未到,⽇志功能就会被禁⽤。
不少应⽤服务器的classpath中已经包含Commons Logging,如Tomcat和WebShpere,所以MyBatis会把它作为具体的⽇志实现。记住这点⾮常重要。
这将意味着,在诸如 WebSphere的环境中——WebSphere提供了Commons Logging的私有实现,你的Log4J配置将被忽略。
这种做法不免让⼈悲催,MyBatis怎么能忽略你的配置呢?事实上,因Commons Logging已经存在了,按照优先级顺序,Log4J⾃然就被忽略了!
不过,如果你的应⽤部署在⼀个包含Commons Logging的环境,⽽你⼜想⽤其他的⽇志框架,你可以通过在MyBatis的配置⽂件l⾥⾯添加⼀项setting(配置)来选择⼀个不同的⽇志实现。
Log4j实现⽇志输出功能
⼀、为什么要配置mybtis的logger?
mybatis⾃⼰设计以及实现了org.apache.ibatis.logging.Log接⼝。
Mybatis为了避免对第三⽅的⽇志包存在强依赖,内部的Log采⽤了代理模式。通过配置的⽅式,代理真实的⽇志对象. 如果没有配置log,mybatis会按照以下顺序尝试加载⽇志输出类:
1. SLF4J
2. Apache Commons Logging
3. Log4j 2
4. Log4j
5. JDK logging
6. no logging(没有⽇志)
log4j2 appender
⼆、如何开启⽇志输出?
2.1 下载log4j的jar包并导⼊到build path下
2.2 开启⽇志输出的配置
在l⽂件中的settings元素中配置⽇志实现类。
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
2.3 编写⼀个⽂件:log4j.properties放在类路径下⾯
第⼀⾏表⽰⽇志输出的级别的debug级别,Console表⽰输出位置是控制台(可以输出到⽂件或数据库,可以是发邮件)。Logger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
2.4 log4j的⽇志输出的级别:
1. DEBUG < INFO < WARN < <ERROR < FATAL
2. DEBUG :流经系统的详细信息。最低级别的⽇志输出,⼀般⽤于开发阶段的调试。
3. INFO :⼀般消息输出(启动、关闭)
4. WARN :警告输出
5. ERROR :错误输出
6. FATAL :导致应⽤程序提前终⽌的严重错误。⼀般这些信息将⽴即呈现在状态控制台上。
查看⽇志输出
debug基本的输出可以清楚地看到连接数据库的详细信息。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。