前言
现在很多项目中都是直接用的@Slf4j
的注解来打印日志,然后又想看mybatis的日志,自己之前也各种网上找方法,配置的东西很多然而又不一定有效。
这个算是已经在自己项目试了有效了的。这里说的只适用于项目使用slf4j日志, mybatis和mybatis-plus, slf4j 和slf4j2, apache的log不一样都可能不生效
依赖
slf4j的依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
配置
slf4j配置
下面的配置关键有两点.
- 保证debug日志能输出,这个可以自己打印试试
log4j.logger.org.mybatis=debug
# 关键
log4j.logger.org.mybatis=debug
# 下面的配置按自己需求而定, 不过要确保debug级别的日志能输出到debug文件
log4j.rootLogger=DEBUG,console,D
############### 控制台 ###################
log4j.appender.logfile.encoding=UTF-8
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=${property.pattern}
############### DEBUG级别 ###################
# 日志输入到debug
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.append=true
log4j.appender.D.file=../logs/oa-exchange/debug/debug.log
log4j.appender.D.DatePattern='-'yyyyMMdd'.log'
.....剩下的日志配置
mybatis配置
这个在mybatis配置文件中加上
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
效果
如果slf4j日志配置中, 没有 log4j.logger.org.mybatis=debug
, 就可能只有黄色框框的信息, 没有红色信息 (可以帮助我们知道是否开启了事务, 个人觉得很重要)
其他几种配置
mybatis的配置中, 针对项目使用不同的日志, 有不同的配置
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING| STDOUT_LOGGING | NO_LOGGING
比如
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" /> ====》System.out.pringln.
</settings>
</configuration>
这也是网上常见的一种, 这种方式不太好的地方, 就是它还是作为控制台输出的System.out.pringln
, 无法使用我们的日志配置格式, 也没有刷到日志文件中.
而且如果项目使用的是slf4j, 使用LOG4J | LOG4J2
启动项目都会报错
附
Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺序查找
)。如果一个都未找到,日志功能就会被禁用。
未指定时自动查找???什么意思呢???
只要你的springmvc 工程中配置了log4j.properties ,
<setting name="logImpl" value="LOG4J" />
=== >可写可不写, 这个自己试了下, 注释了确实仍然生效。
就会按照上文列举的顺序查找到对应的配置日志框架Log4。