最近在学习
spring boot,日志用的是logback,至于为什么没有选常用的log4j,因为logback是spring boot官方推荐的日志系统。但是在整合Mybatis的时候一直打印不了SQL语句,查阅多方资料,终于解决了~
-
先展示下
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> -
如果是 Log4J 实现的话可以参考Mybatis 日志
-
第一个节点
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: 换行符 -
第二个节点
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> -
第三个节点
fileErrorLog是将错误日志记录在文件中,不保存其他级别的日志,需要配置一个filter节点。拦截内容如下(注意单词大小写,千万不能出错!):<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> -
在这里再推荐一个 maven 依赖,
lombok<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> -
在 idea 里安装
lombok的相应插件
-
然后就可以在类名上方添加
@Slf4j注解,这样就可以直接在代码中使用log.info("....")打印日志了。 -
再提示下
lombok的其他使用技巧,如果使用了lombok,只要在实体类的类名上加上@Data注解,那么我们就不需要写getter/ setter/toString方法,lombok会自动生成getter/setter/toString方法,我们直接调用就可以了,如果只需要生成getter或者setter,就可以直接使用@Getter或者@Setter注解。并且@Getter和@Setter这两个注解不止可以用在Class上,还可以用在Enum上哦。 -
就介绍到这儿,enjoy it !!!