SpringBoot使用自带的日志框架(开箱即用,同时输出到文件与控制台)

2023-12-15 05:50:11

在SpringBoot内部中,默认就集成了LogBack的日志依赖,所以我们其实在实际开发中不需要直接添加该依赖。
你会发现spring-boot-starter其中包含了
spring-boot-starter-logging,Spring Boot为我们提供了很多默认的日志配置,所以,只要将spring-boot-starter-logging作为依赖加入到当前应用的classpath,则“开箱即用”。

本项目以springboot 2.7.5为例

目录

1.引入依赖

2.logback的日志等级

3.logback日志配置文件

4.如何在代码中使用日志输出

5.结果


1.引入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

2.logback的日志等级

日志级别从低到高分为:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL

3.logback日志配置文件

放在resources下即可

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback</contextName>

    <!--控制台输出内容的颜色转换以及格式-->
    <substitutionProperty name="logging.pattern.console"
                          value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
    <!--日志文件输出内容的格式-->
    <substitutionProperty name="logging.pattern.file"
                          value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制台使用layout节点-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                ${logging.pattern.console}
            </pattern>
        </layout>
    </appender>

    <!--按天生成日志-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Prudent>true</Prudent>
        <!--滚动策略,我配置了按天生成日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--相对路径,生成的文件就在项目根目录下-->
            <FileNamePattern>
                logs/%d{yyyy-MM}/%d{yyyy-MM-dd}.log
            </FileNamePattern>
            <!--注意超过365天的日志文件会被删除,即使已经按天分开也会删除-->
            <MaxHistory>365</MaxHistory>
        </rollingPolicy>
        <!--日志文件里只保存ERROR及以上级别的日志-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <!--文件使用encoder节点-->
        <encoder>
            <Pattern>
                ${logging.pattern.file}
            </Pattern>
        </encoder>
    </appender>

    <!--这个logger里的配置相当于之前yml里的logging.level.com.lpc: trace-->
    <!--additivity的作用-->
    <!--true,则子Logger不止会在自己的appender里输出,还会在root的logger的appender里输出-->
    <!--而这个logger里没配置appender,所以得交给root打印-->
    <!--所以com.lpc包里的日志从TRACE级别开始-->
    <!--其他包里的日志根据root的配置从INFO级别开始打印-->
    <logger name="com.lpc" level="TRACE" additivity="true">
    </logger>

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

</configuration>
  • contextName

每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用contextName标签设置成其他名字,用于区分不同应用程序的记录。

  • property

用来定义变量值的标签,property标签有两个属性,name和value;其中name的值是变量的名称,value的值时变量定义的值。通过property定义的值会被插入到logger上下文中。定义变量后,可以使“${name}”来使用变量。如上面的xml所示。

  • logger

用来设置某一个包或者具体的某一个类的日志打印级别以及指定appender。

  • root

根logger,也是一种logger,且只有一个level属性。

  • appender

负责日志的组件。

4.如何在代码中使用日志输出

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Test {
    private static final Logger LOGGER = LoggerFactory.getLogger(Test .class);
    public static void main(String[] args) {
   
            LOGGER.info("这是一条log数据"+i);
        
       try{
       } catch (Exception e) {
           LOGGER.info("错误信息:" + e.getMessage());
    }
    }
}

当然,如果有引入lombok的话,可以更简单

引入lombok

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

@Slf4j
public class Test{
 
 
    public String getInfo() {
        log.info("日志信息");
    }
}

5.结果

文章来源:https://blog.csdn.net/gzu_01/article/details/134920417
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。