slf4J输出mybatis日志的方法(非stdout方式)

slf4J输出mybatis日志的方法(非stdout方式)

前言

现在很多项目中都是直接用的@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配置

下面的配置关键有两点.

  1. 保证debug日志能输出,这个可以自己打印试试
  2. 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。

官网原文:
https://mybatis.org/mybatis-3/logging.html
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章