spring-boot整合mybatis的时候使用logback打印日志

最近在学习 spring boot ,日志用的是 logback ,至于为什么没有选常用的 log4j ,因为 logbackspring boot 官方推荐的日志系统。但是在整合 Mybatis 的时候一直打印不了 SQL 语句,查阅多方资料,终于解决了~

  1. 先展示下 logback-spring.xml 的完整内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
    <pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
    </layout>
    </appender>
    <appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--滚动策略-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--输出路径-->
    <fileNamePattern>${user.dir}/logs/log/online-study.%d.log</fileNamePattern>
    </rollingPolicy>
    <encoder>
    <pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
    </encoder>
    </appender>
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
    <!--滚动策略-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--输出路径-->
    <fileNamePattern>${user.dir}/logs/error/online-study.%d.error</fileNamePattern>
    </rollingPolicy>
    <encoder>
    <pattern>【xkcoding】%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
    </encoder>
    </appender>
    <!--
    logger
    属性:
    1)name:用来指定受此logger约束的某一个包或者具体的某一个类
    2)level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR
    -->
    <!-- 用于打印 Spring 在启动的时候初始化各个 Bean 的信息 -->
    <logger name="org.springframework.web" level="DEBUG"/>
    <!-- mybatis 日志打印如果在 ssm 中,可能就需要下边的7行了。-->
    <!--<logger name="com.ibatis" level="DEBUG" />-->
    <!--<logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />-->
    <!--<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />-->
    <!--<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />-->
    <!--<logger name="java.sql.Connection" level="DEBUG" />-->
    <!--<logger name="java.sql.Statement" level="DEBUG" />-->
    <!--<logger name="java.sql.PreparedStatement" level="DEBUG" />-->
    <!-- 以下这一句至关重要如果没有,就无法输出 sql 语句 -->
    <!--注意:在 spring boot 中,想在控制台打印 mybatis 的 sql 语句,只需要配置下边这一句就好了。-->
    <!--如果想要记录更详细的 SQL 日志,只需要把下面的日志级别改成 TRACE 就可以了-->
    <!--即将 mapper 接口打入 logger 就行。-->
    <logger name="com.xkcoding.dao" level="DEBUG"></logger>
    <root level="info">
    <appender-ref ref="consoleLog"/>
    <appender-ref ref="fileLog"/>
    <appender-ref ref="fileErrorLog"/>
    </root>
    </configuration>
  2. 如果是 Log4J 实现的话可以参考Mybatis 日志

  3. 第一个节点 consoleLog 是在控制台显示的 Log 日志,在控制台显示 Log 日志需要在 appender 节点里配置 class="ch.qos.logback.core.ConsoleAppender" ,格式化输出的配置在 pattern 节点中配置,各个参数的介绍如下:

    1
    2
    3
    4
    5
    6
    %-5level: 显示 Log 级别,从左显示5个字符宽度,打印内容: TRACE/DEBUG/INFO/WARN/ERROR
    %d{yyyy-MM-dd HH:mm:ss.SSS}: 显示时间戳,{}中内容代表时间戳格式
    %thread: 显示线程名字
    %logger{36}: 表示 logger 名字最长36个字符,否则按照句点分割
    %msg: 日志消息
    %n: 换行符
  4. 第二个节点 fileLog 是将日志保存为文件,需要在 appender 节点里配置 class="ch.qos.logback.core.rolling.RollingFileAppender" ,并且指定滚动策略,为每天一个文件,指定文件名为 %d.log

    1
    2
    3
    4
    5
    <!--滚动策略-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!--输出路径-->
    <fileNamePattern>${user.dir}/logs/log/online-study.%d.log</fileNamePattern>
    </rollingPolicy>
  5. 第三个节点 fileErrorLog 是将错误日志记录在文件中,不保存其他级别的日志,需要配置一个 filter 节点。拦截内容如下(注意单词大小写,千万不能出错!):

    1
    2
    3
    4
    5
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
    </filter>
  6. 在这里再推荐一个 maven 依赖,lombok

    1
    2
    3
    4
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    </dependency>
  7. 在 idea 里安装 lombok 的相应插件
    lombok插件

  8. 然后就可以在类名上方添加 @Slf4j 注解,这样就可以直接在代码中使用 log.info("....") 打印日志了。

  9. 再提示下 lombok 的其他使用技巧,如果使用了 lombok ,只要在实体类的类名上加上 @Data 注解,那么我们就不需要写 getter/ setter/toString 方法,lombok 会自动生成 getter/setter/toString 方法,我们直接调用就可以了,如果只需要生成 getter 或者 setter,就可以直接使用 @Getter 或者 @Setter 注解。并且 @Getter@Setter 这两个注解不止可以用在 Class 上,还可以用在 Enum 上哦。

  10. 就介绍到这儿,enjoy it !!!

o(╯□╰)o我只要一毛钱的鼓励~~