Spring Boot Logback日志

Spring Boot 日志


使用日志框架来帮助我们记录系统运行情况,比如当系统发生异常信息,运行正常的信息等等都可以记录,便于系统维护。

Logback日志框架

logback是在java社区被广泛使用的一种日志框架。logback的前生是log4j。相比log4j而言,logback可以更快实现并且提供更多的选项和灵活的配置。

除了使用LogBack,我们还要使用SLF4J来作为LogBack的接口。不过SPring Boot 框架已经帮助我们集成这些依赖。

Logback的体系结构

三个类类组成了logback的体系结构:Logger、Appender、Layout.

  • Logger:日志信息容器
  • Appender 日志信息位于什么地方。比如控制台、文件等等。
  • Layout:日志信息输出格式。
开始Coding

在开始编程时,我们需要在 resources 目录添加 logback.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

开始测试

@SpringBootTest
class WecatorderApplicationTests {
    private final static Logger logger = LoggerFactory.getLogger(WecatorderApplication.class);
    @Test
    void contextLoads() {
        logger.info("Example log from {}", "hello logger");
    }
}
Logger Context

初始化一个logger通过 SLF4J 或者 Logback

private static final Logger logger 
  = LoggerFactory.getLogger(Test.class);

logger是有继承关系的

比如,Example类位于com.test.logback包下。另一个ExampleAppender位于com.test.logback.appenders包下。那么ExampleAppender的logger是Example的logger的孩子。

所有的logger都是预先定义root logger的后代
每个logger都一个级别,可以配置级别在配置文件中,也可以通过编程Logger.setLevel()来设置级别。通过代码设置会覆盖配置文件中级别

级别的优先级:ERROR>WARN>INFO>TRACE

等级越高先输出

如果一个logger没有显示指定级别,它将继承最近的祖先的级别

ch.qos.logback.classic.Logger parentLogger = 
  (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.baeldung.logback");
 
parentLogger.setLevel(Level.INFO);
 
Logger childlogger = 
  (ch.qos.logback.classic.Logger)LoggerFactory.getLogger("com.baeldung.logback.tests");
 
parentLogger.warn("This message is logged because WARN > INFO.");
parentLogger.debug("This message is not logged because DEBUG < INFO.");
childlogger.info("INFO == INFO");
childlogger.debug("DEBUG < INFO");

输出信息

20:31:29.586 [main] WARN com.baeldung.logback - This message is logged because WARN > INFO.
20:31:29.594 [main] INFO com.baeldung.logback.tests - INFO == INFO

childlogger并没有显示指定Level,childlogger是继承parentLogger,所以childlogger也具有INFO级别,所以只会打印级别大于等于INFO的日志

Appenders

ConsoleAppender

使用ConsoleAppender输出信息到控制台上

FileAppender

使用FileAppender输出信息到文件

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>tests.log</file>
        <append>true</append>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="debug">
        <appender-ref ref="FILE" />
    </root>
</configuration>
RollingFileAppender

有时我们并不需要把日志信息都追加到同一个文件中。我需要在按时回滚文件,或者按文件大小回滚。那就需要用到RollingFileAppender了

<property name="LOG_FILE" value="LogFile" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_FILE}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.gz</fileNamePattern>
 
        <!-- keep 30 days' worth of history capped at 3GB total size -->
        <maxHistory>30</maxHistory>
        <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender> 

RollingFileAppender提供回滚策略以满足不同回滚需求,当达到3GB时,会采用FIFO的删除前面归档的文件

Layouts

<encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>

参数含义:

  • %d{HH:mm:ss.SSS}:时间戳,时,分,秒和毫秒
  • [%thread]:线程名
  • %-5level:日志级别,填充5个字符
  • %logger{36}:logger名字(类名),截断36个字符
  • %msg%n:日志信息以及换行
参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值