一、使用Spring Boot Actuator动态修改日志级别

spring boot actuator是通过接口修改日志级别

1.引入spring-boot-starter-actuator依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
	<version>2.3.7.RELEASE</version>
</dependency>

2.暴露接口

从spring boot2.0开始默认的接口是不可用的,需要加上配置

management.endpoints.web.exposure.include=loggers
management.endpoint.loggers.enabled=true

application.properties的配置文件是

# 应用名称
spring.application.name=logback
# 应用服务 WEB 访问端口
server.port=8080
management.endpoints.web.exposure.include=loggers
management.endpoint.loggers.enabled=true
logging.level.com.logback.logback = info
package com.logback.logback;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description LogbackController
 * @Author caofeifei
 * @Date 2021/3/31 下午9:40
 */
@RestController
@Scope("prototype")
public class LogbackController {

    private Log log = LogFactory.getLog(LogbackController.class);

    @RequestMapping("/logback")
    public String test() {
        log.warn("warn");
        log.info("info");
        log.debug("debug");
        log.trace("debug");
        return "1";
    }
}

3.查看日志级别和修改日志级别

通过rest接口查看日志级别
请求接口:http://localhost:8080/actuator/loggers/com.logback.logback
在这里插入图片描述
此时请求接口/logback,打印了如下:
在这里插入图片描述
修改日志级别
在这里插入图片描述
此时再请求接口/logback,打印了如下:
在这里插入图片描述

二、使用logback实现日志热加载

logback日志的热加载主要依赖与自带的scan属性

1.在reource文件夹下新建logback.xml属性

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">
    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <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" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{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}}"/>


    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <logger name="com.logback.logback" level="info" />

    <root level="info">
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>

2.启动项目,请求接口

此时请求接口/logback,打印了如下:
在这里插入图片描述
修改logback.xml的日志级别,logback整个就是指定周期的查看整个文件是否被编辑
在这里插入图片描述

注意我用的是idea直接启动项目,项目记载的是target里面的文件,因此需要修改target里面文件才生效
此时再次请求接口/logback,打印了如下:
在这里插入图片描述
修改级别为debug,生效

三、使用nacos或者apollo配置中心实现日志的热加载

nacos或者apollo的日志的热加载只需要实现配置更改后自动刷新即可

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐