logback 使用心得
springboot的配置文件
配置文件可以使用logback-spring.xml,有些是使用logback.xml,使用logback-spring.xml的好处在于logback-spring.xml在application.yml后加载,可以读取application.yml中的属性。
概念:
日志级别,TRACE < DEBUG < INFO < WARN < ERROR,在配置文件的appender中可以定义需要输出的日志级别,
有两种定义级别的方式:
1.定义只输出某种类型,例如:
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
表示只输出error级别的日志,对应于代码就是log.error方法打印的才会进入该appender
2.定义输出高于此级别的类型,例如:
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>trace</level>
</filter>
表示只要高于trace级别的日志都会输出,对应代码就是log.trace,log.debug,log.info,log.warn,log.error都可以输出到此append
在实战项目中,我们需要让jdbc的日志不仅输出到命令行,而且输出到文件
1.把mybatis-plus的标准输出为控制台输出注释掉,这样它就会用logback的配置输出日志
#mybatis-plus:
# configuration:
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.在logback-spring.xml的配置文件中,appender为CONSOLE和DEBUG_FILE中配置过滤级别为trace,因为jdbc的日志属于trace级别,如下为输出的示例
2018-12-26 17:54:49.611 INFO 8584 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2018-12-26 17:54:52.536 INFO 8584 --- [nio-8080-exec-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2018-12-26 17:54:52.546 DEBUG 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : ==> Preparing: select * from Version order by UpdatedTime desc limit 10
2018-12-26 17:54:52.569 DEBUG 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : ==> Parameters:
2018-12-26 17:54:52.849 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Columns: Id, Name, UpdatedTime
2018-12-26 17:54:52.850 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 71d251f67151454f8877cc943479cb9c, 1233445, 2018-12-24 11:12:01
2018-12-26 17:54:52.853 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 123, 123, 2018-12-21 16:00:00
2018-12-26 17:54:52.854 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 797b4f3adb62425cb093529aecc1cbd7, 2018121316014400, 2018-12-13 18:07:02
2018-12-26 17:54:52.854 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: f323575b808f44f79574e487bf8045c8, 2018121316014400, 2018-12-13 17:54:06
2018-12-26 17:54:52.855 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: fe8000908c174322a79e38891e95780c, 2018121316014400, 2018-12-13 17:47:26
2018-12-26 17:54:52.855 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 596af6d0267e40128906af80e987f614, 2018121316014400, 2018-12-13 17:45:35
2018-12-26 17:54:52.855 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 2f5d1f0b9cb04d77a12f9fd6bbdfa7b6, 2018121316014400, 2018-12-13 16:08:55
2018-12-26 17:54:52.855 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 7856593f10514ec5b8d23c0e44f4c512, Thu Dec 13 16:01:44 CST 2018, 2018-12-13 16:03:09
2018-12-26 17:54:52.856 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: 740478794dcf49518b39e377bd825cc0, xyz, 2018-12-13 16:01:44
2018-12-26 17:54:52.856 TRACE 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Row: a674120ef4b040be99f5b0fa91814be7, 20181212103501, 2018-12-12 10:35:06
2018-12-26 17:54:52.856 DEBUG 8584 --- [nio-8080-exec-1] c.n.d.a.m.V.GetTop10Versions : <== Total: 10
2018-12-26 17:54:52.858 INFO 8584 --- [nio-8080-exec-1] com.nike.dntool.api.util.LogUtils :
这样,我们在控制台和日志文件dntool-debug.log中就能看到这些sql的输出,对于追查异常很有用
不同的环境,使用不同的配置,我们目的要做到jdbc的日志,在dev环境输出到控制台,prod环境不用输出控制台,dev环境不用压缩,prod环境压缩dntool-debug.log这个文件(dntool-debug.log这里面有sql会很大)
将来api的输入,输出结果,都用log.trace来输出,放到dntool-debug.log这个文件中,然后定期清理或压缩这个文件就可以,dntool-info.log这个日志文件只保留一些api执行时间,执行方法的和异常日志,并不会很大
<!--开发环境:打印控制台-->
<springProfile name="dev">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="WARN_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
<!--生产环境:输出到文件-->
<springProfile name="prod">
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DEBUG_FILE"/>
<appender-ref ref="INFO_FILE"/>
<appender-ref ref="ERROR_FILE"/>
</root>
</springProfile>
这里的level="info",定义了总的输出级别,如果小于这个级别的将不收集,也就不进入append,在生产服务器上也要收集info信息,所以我们设置为info,springProfile中的name为不同环境的配置,启动时使用--spring.profiles.active=prod来指定。
虽然在logback-spring.xml中定义了总的输出级别,但还是可以在application.yml中定义不同包下面的输出级别,例如需要输出jdbc的trace信息,因此可以配置如下:
logging:
level:
# com.nike.dntool.api.service: trace
# com.nike.dntool.api.controller: trace
com.nike.dntool.api.mapper: trace
# web: trace
没有定义级别的包,使用info这个总的输出级别。
logback:
logDir: log/dev
这个配置的logback日志文件的输出目录,由以下方式定义。
<!--application.yml 传递参数,不能使用logback 自带的<property>标签 -->
<springProperty scope="context" name="logDir" source="logback.logDir"/>
可以在application-dev.yml和application-prod.yml中指定不同级别的日志
参考:https://www.cnblogs.com/lixuwu/p/5804793.html#autoid-1-0-0
https://blog.csdn.net/shouhuzhezhishen/article/details/64443287(配置滚动压缩)
imooc网:Java开发企业级权限管理系统(SpringMVC开发环境搭建-logback.xml配置)
https://edu.csdn.net/course/play/8072/165440
浙公网安备 33010602011771号