Mybatis集成日志框架

233 阅读1分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

1、日志门面:SLF4J

官方文档:www.slf4j.org/

2、日志实现:Logback

官方文档:logback.qos.ch/

3、在Mybatis中实现日志管理

3.1 导入pom

<!-- log start -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.30</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>
<!-- log end -->

实际依赖的jar包如下图:

image.png

引入以上jar包后,无需配置便会有详细日志输出。 执行如下代码:

public class MybatisTest {

    SqlSessionFactory sqlSessionFactory;
    @Before
    public void before(){
        // 从 XML 中构建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void test(){
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
            UserInfo userInfo = mapper.selectUser(1);
            System.out.println(userInfo);
        }
    }
}

输出日志如下:

image.png

3.2 添加logback配置文件

3.2.1 日志级别

logbakc的日志级别分别为:TRACE < DEBUG < INFO < WARN < ERROR。默认的日志级别为debug。当设置了日志级别后,大于该级别的日志也可以输出。

package com.zhl.com.zhl.test;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MybatisTest {
    Logger logger = LoggerFactory.getLogger(this.getClass());
    @Test
    public void testLogger(){
        logger.trace("trace级别");
        logger.debug("debug级别");
        logger.info("info级别");
        logger.warn("warn级别");
        logger.error("error级别");
    }
}

此时日志级别为默认的 debug,所以只能输出debug以及高于debug级别的日志 image.png

3.2.2 logback.xml

<configuration>
    <!--appender 追加器   日志以哪种方式进行输出
            name 取个名字
            class 不同实现类会输出到不同地方
                ch.qos.logback.core.ConsoleAppender 输出到控制台
    -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 格式 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--控制更细粒度的日志级别  根据包/类-->
    <logger name="com.zhl.mapper" level="debug"></logger>
    <!--控制所有的日志级别-->
    <root level="error">
        <!-- 将当前日志级别输出到哪个追加器上面 -->
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

此时,只有 error 级别的日志会输出。