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

<?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());

项目源码

github:https://github.com/dqjdda/SpringBoot_All

码云:https://gitee.com/hgpt/SpringBoot_All

开源后台管理系统:

欢迎体验Aurora

github: https://github.com/dqjdda/Aurora

码云: https://gitee.com/hgpt/Aurora

猜你喜欢

转载自blog.csdn.net/zj7321/article/details/83108240