Spring boot 使用Logback打印日志
Logback是什么
Logback是由log4j创始人设计的又一个开源日志组件,它的使用非常简单灵活,是目前主流的日志记录工具。
slf4j log4j logback关系
笼统的讲就是slf4j是一系列的日志接口,而log4j logback是具体实现了的日志框架。官网文档中有一句话明确描述了三者的关系:slf4j译为简单日志门面,实现了日志框架一些通用的api,log4j和logback是具体的日志框架
logback的优势
log4j和logback都是出自Ceki Gülcü之手,而logback相对于log4j来说更新一点。无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进,但是两者的用法几乎差别不大。下面是logback的优势:
- 更快的执行速度
- 充分的测试
- logback-classic 非常自然的实现了SLF4J
- 丰富的扩展文档
- 可以使用使用XML配置文件或者Groovy
- 自动重新载入配置文件
- 优雅地从I/O错误中恢复
- 自动清除旧的日志归档文件
- 自动压缩归档日志文件
更多优点可以参考官方文档:中文版 英文版
默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台
使用logbacck
使用logbak我们无需引入依赖,因为spring-boot-starter中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。
logbak的日志级别从低到高分为:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
如果设置为 WARN则低于WARN的信息都不会输出。
Spring Boot中默认配置ERROR、WARN和INFO级别的日志输出到控制台
自定义日志配置
在resources目录下使用如下文件名就能被spring boot扫描到
logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),如果想自定义文件名,可以通过logging.config属性指定自定义的名字:
logging.config=classpath:my-logging-config.xml
在resources目录中新建logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--文件保存在项目根目录的log文件夹中-->
<property name="log.path" value="log" />
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!--输出到文件-->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--日志输出-->
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- logback:包路径 -->
<logger name="me.zhengjie.app.rest" level="WARN" additivity="false"/>
<!--logback:类的全路径 -->
<logger name="me.zhengjie.app.rest.UserController" level="WARN" additivity="false">
<appender-ref ref="console"/>
</logger>
</configuration>
节点介绍可以参考Albin 的文章:logback节点配置详解
启动项目效果如下
优化显示效果
修改节点中的内容,修改如下
<encoder>
<pattern>%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)</pattern>
<charset>utf-8</charset>
</encoder>
启动项目,查看效果
多环境日志输出
据不同环境(prod:生产环境,test:测试环境,dev:开发环境)来定义不同的日志输出,在 logback-spring.xml中使用 springProfile 节点来定义,方法如下:
文件名称不是logback.xml,想使用spring扩展profile支持,要以logback-spring.xml命名
<!-- 测试环境+开发环境. 多个使用逗号隔开 -->
<springProfile name="test,dev">
<logger name="me.zhengjie.app.rest" level="info" />
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
<logger name="me.zhengjie.app.rest" level="ERROR" />
</springProfile>
可以启动服务的时候指定 profile (如不指定使用默认)
指定prod 的方式为:
java -jar xxx.jar –spring.profiles.active=prod
在类中使用
代码中使用日志只需要类里面添加如下代码即可
private Logger logger = LoggerFactory.getLogger(this.getClass());
还没有评论,来说两句吧...