Skip to content
CodingDiary
返回

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

编辑页面
导读

Spring Boot 整合 MyBatis 后,SQL 语句死活打印不出来?关键在于 logback-spring.xml 里要把 Mapper 接口的包路径配成 DEBUG 级别。本文提供完整的 logback 配置模板,包括控制台输出、按日期滚动的文件日志、独立的错误日志。另外安利 Lombok 的 @Slf4j 注解,告别冗余的 Logger 声明。

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

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

    <?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 节点中配置,各个参数的介绍如下:

    %-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

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

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

    <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 !!!


编辑页面
分享到:

上一篇
自定义阻塞队列
下一篇
Windows10 系统下载与激活