springboot logback 日志使用

文章介绍了日志的不同级别,如trace、info、debug、warn、error和fatal,并展示了如何在Springboot项目中创建自定义的日志转换器,用于在logback配置中获取和显示traceId。同时,文中还提到了多环境配置,如开发、测试和生产环境的logback设置,以及如何针对不同环境调整日志级别。此外,还提及了mapper层SQL日志的DEBUG级别输出配置。

一、业务需求

日志级别的分类

日志的级别分为:

  1. trace:微量,少许的意思,级别最低
  2. info:普通的打印信息
  3. debug:需要调试时候的关键信息打印
  4. warn:警告,不影响使⽤,但需要注意的问题
  5. error:错误信息,级别较⾼的错误日志信息
  6. fatal:致命的,因为代码异常导致程序退出执行的事件

日志级别的顺序:

Spring Boot 默认的日志级别

Root Logger 级别: INFO

  • 这意味着默认会输出 INFO、WARN 和 ERROR 级别的日志
  • DEBUG 和 TRACE 级别的日志默认不会输出

Spring Boot 相关包的默认级别:

  • org.springframework.boot: INFO
  • org.springframework.web: INFO
  • org.springframework.security: INFO

第三方库的默认级别:

  • 大多数第三方库默认也是 INFO 级别

二、实现

只在文件内部使用,实现步骤:

      ①编写继承了ch.qos.logback.classic.pattern.ClassicConverter类的方法

      ②重写convert()方法,将需要用到的变量返回即可

      ③在xml配置文件中引入,并使用

package net.company.springboot.logback.classic;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;

public class TraceConverter extends ClassicConverter {
  public TraceConverter() {
  }

  public String convert(ILoggingEvent event) {
    String traceId = TraceContext.traceId();
    return null != traceId ? traceId : "-";
  }
}

logback高级特性使用

项目的 resources 资源目录下新建 logback 日志配置文件(logback.xml )

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="false" scanPeriod="60000" debug="false">
    <!-- 获取 traceId 配置类-->
    <conversionRule conversionWord="trace" converterClass="net.company.springboot.logback.classic.TraceConverter"/>

    <!-- 自定义 logback 日志格式-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}|%level|%trace|[%thread] %logger{36} -%msg%n</Pattern>
        </encoder>
    </appender>

    <root level="info">
        <!-- 控制台打印 -->
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

多环境配置

在一个基于Spring boot开发的项目里,常常需要有多套环境的配置:开发,测试以及产品。使用springProfile 可以分别配置开发(dev),测试(test)以及生产(prod)等不同的环境

<!-- 开发环境和测试环境 -->
<springProfile name="dev,test">
    <logger name="com.atguigu" level="INFO">
        <appender-ref ref="CONSOLE" />
    </logger>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
    <logger name="com.atguigu" level="ERROR">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </logger>
</springProfile>

异步日志记录

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE"/>
    <queueSize>1024</queueSize>
    <discardingThreshold>0</discardingThreshold>
</appender>

条件化配置

<if condition='property("spring.profiles.active").equals("prod")'>
    <then>
        <root level="WARN">
            <appender-ref ref="FILE"/>
        </root>
    </then>
    <else>
        <root level="DEBUG">
            <appender-ref ref="CONSOLE"/>
        </root>
    </else>
</if>

MDC

用于在日志中添加上下文信息,例如用户ID、请求ID等:

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

日志轮转策略

基于时间和大小的轮转策略

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>logs/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>30</maxHistory>
        <totalSizeCap>3GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

过滤器使用

可以配置阈值过滤器或自定义过滤器

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
    <file>logs/application.log</file>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

打印sql日志

logging:
  config: classpath:logback.xml
  level:
    net:
      company:
        test:
          dao:
            mapper: debug   #mapper层 sql日志 DEBUG级别输出

关闭自动配置日志

日志输出包含 Did not match: - @ConditionalOnClass did not find required class 

logging:
  level:
    org.springframework.boot.autoconfigure: ERROR

org.springframework.boot.autoconfigure 包只输出 ERROR 级别日志

### 如何在 Spring Boot 中配置和使用 Logback 进行日志管理 #### 配置 `application.yml` 文件中的日志属性 为了更好地控制日志行为,在 `application.yml` 或者 `application.properties` 文件中可以指定一些基本的日志参数。例如: ```yaml logging: level: root: INFO com.example.demo: DEBUG file: path: './logs' name: '${LOGGING_FILE_PATH:-./logs}/app.log' config: 'classpath:logback-spring.xml' ``` 这段配置指定了根日志级别为 `INFO`,而特定包下的类则采用更详细的 `DEBUG` 日志级别;还设置了日志文件存储路径以及名称,并指向了一个名为 `logback-spring.xml` 的自定义日志配置文件[^2]。 #### 创建并编辑 `logback-spring.xml` 文件 按照官方建议创建一个叫做 `logback-spring.xml` 的XML格式的Logback配置文件放置于资源目录下。此文件允许更加细粒度地定制化日志输出方式、格式及时机等内容。下面给出了一种常见的模板结构: ```xml <configuration> <!-- 定义变量 --> <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/> <property name="LOG_DIR" value="./logs"/> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 滚动文件输出 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- daily rollover --> <fileNamePattern>${LOG_DIR}/archived/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <!-- 设置默认的日志记录器 --> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration> ``` 上述 XML 片段展示了如何设置控制台与文件两种类型的 appender 来分别处理不同场景下的日志需求。其中特别值得注意的是对于文件型 Appender 使用了基于时间和大小混合策略来进行轮转操作,从而有效地解决了长期运行应用所产生的大量日志占用过多磁盘空间的问题[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值