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中默认配置ERRORWARNINFO级别的日志输出到控制台

自定义日志配置

在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


<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logbackcontextName>
    
    <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%npattern>
            <charset>utf-8charset>
        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}.logfileNamePattern>
        rollingPolicy>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%npattern>
        encoder>
    appender>

    
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    root>

    
    <logger name="me.zhengjie.app.rest" level="WARN" additivity="false"/>

    
    <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-8charset>
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());

你可能感兴趣的:(Spring boot 使用Logback打印日志)