logback日志级别动态切换四种方案

server/2024/11/4 6:34:30/

生产环境中经常有需要动态修改日志级别。 现在就介绍几种方案

方案一:开启logback的自动扫描更新

配置如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- configuration标签 scan属性代表logback框架会定时检测改配置文件是否有发生改动,如果有则更新为最新配置-->

然后就将修改的配置文件拷贝到app.jar的同级目录下config/logback.xml

方案二:自定义api

代码如下

package com.example.mybatiesdemo.controller;import ch.qos.logback.classic.Logger;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.example.mybatiesdemo.config.HyposensitizationExecutor;
import com.example.mybatiesdemo.dto.BsBonusSalesEo;
import com.example.mybatiesdemo.im.service.IMServiceDemo2;
import com.example.mybatiesdemo.mapper.UserMapper;
import com.example.mybatiesdemo.ocr.ocrService.utlis.SocrService;
import com.example.mybatiesdemo.retry.spring.MyRetryService;
import org.apache.tika.Tika;
import org.junit.jupiter.api.Test;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;/**** @Author : Wukn* @Date : 2024/4/26*/
@RestController
@RequestMapping(value = "/log")
public class LogBackController {/*** logback动态修改包名的日志级别* @param level 日志级别* @param packageName 包名* @return 当前的日志级别* @throws Exception*/@RequestMapping(value = "/setlevel")public String updateLogbackLevel( @RequestParam(value="level") String level,@RequestParam(value="packageName",defaultValue = "-1") String packageName) throws Exception {ch.qos.logback.classic.LoggerContext loggerContext =(ch.qos.logback.classic.LoggerContext) LoggerFactory.getILoggerFactory();Logger logger= null;if(packageName.equals("-1")) {// 默认值-1,更改全局日志级别;否则按传递的包名或类名修改日志级别。logger=  loggerContext.getLogger("root");} else {logger= loggerContext.getLogger(packageName);}logger.setLevel(ch.qos.logback.classic.Level.toLevel(level));return logger.getLevel().levelStr;}}

方案三:springboot引入Actuator

1、pom.xml增加相关依赖

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

1、配置文件中增加配置 如果是springboot1.X,

management.security.enabled=false

如果是springboot2.X,则参考如下配置

management:endpoint:health:show-details: "ALWAYS"endpoints:web:exposure:include: "*"

3、查看级别 我们可以发送GET 请求到
http://localhost:8080/actuator/loggers 来获取支持的日志等级,以及系统(ROOT)默认的日志等和各个包路径(com.xxx.aa等)对应的日志级别。

访问会返回所有的类的日志级别信息。

4、修改日志级别 通过
http://localhost:8080/actuator/loggers 端点提供的 POST 请求,修改包路径com.xxx.aa的日志级别为DEBUG:

发送POST 请求到
http://localhost:8080/actuator/loggers/com.xxx.aa,其中请求 Body 的内容如下:

{
"configuredLevel": "DEBUG"
}

再用GET 访问
http://localhost:8080/loggers/com.xxx.aa查看当前的日志级别:

{
configuredLevel: "DEBUG",
effectiveLevel: "INFO"
}

方案四 集成springcloudadmin来动态修改配置

springcloudadmin安装部署我就不做描述了,网上很多。 1、引入admin依赖

		<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

2、登录springcloudadmin,找到指定的服务中某一个节点

在这里插入图片描述

然后点击左边日期,进入控制台,如下

在这里插入图片描述

这样就能动态修改了,操作比较方便。

总结

在条件允许的情况下建议使用方案四


http://www.ppmy.cn/server/137321.html

相关文章

Kafka之消费者客户端

1、历史上的二个版本 与生产者客户端一样&#xff0c;在Kafka的发展过程当中&#xff0c;消费者客户端主要有两个大的版本&#xff1a; 旧消费者客户端&#xff08;Old Consumer&#xff09;&#xff1a;基于Scala语言开发的版本&#xff0c;又称为Scala消费者客户端。新消费…

StarRocks数据库在SQL语句中解析JSON字符串

StarRocks数据库在SQL语句中解析JSON字符串 -- 使用数据库 use sr_test; -- 删除表 drop table ts_usr; -- 创建表 CREATE TABLE ts_usr ( uid bigint NOT NULL COMMENT "用户id", uname varchar(64) NULL COMMENT "用户名", ujson varchar(1024) NULL CO…

【鸿蒙】【一站式学习鸿蒙】第一章节 初识鸿蒙 HarmonyOS之Stage模型的程序包结构

Stage模型模型API9开始主推&#xff0c;类似于android 的kotlin成为官方主要推荐语言。 &#xff08;1&#xff09;Stage模型 的程序包结构 AppScope目录由DevEco Studio自动生成&#xff0c;不可更改。 Module目录名称可以由DevEco Studio自动生成&#xff08;比如entry、lib…

【YOLO 系列】基于YOLO的行人口罩检测系统【python源码+Pyqt5界面+数据集+训练代码】

前言 在当前全球公共卫生形势下&#xff0c;戴口罩已成为预防呼吸道疾病传播的重要措施。然而&#xff0c;确保每个人都遵守这一规定仍然是一项挑战。为了提高公共场合的口罩佩戴合规性&#xff0c;我们开发了基于YOLO V8的行人口罩检测系统。该系统利用深度学习技术&#xff…

Java学习Day54:初遇萍萍(权限控制)

1.权限控制 1.1 导入Spring Security环境 pom&#xff1a; <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>${spring.security.version}</version> </de…

【面试题】Node.JS篇

1. 什么是Node.js?它的主要特点是什么?适用于哪些场景? Node.js 是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;它允许JavaScript代码在服务器端运行。Node.js的主要特点是事件驱动、非阻塞I/O模型&#xff0c;这使得它非常适合处理高并发请求和实时应用。它适…

初识字节码文件--Java

1&#xff0c;问题&#xff1a;请问以下代码&#xff0c;每行创建了几个对象&#xff1f; public static void main(String[] args) {String a "你好";String b new String("你好");String c "你" "好";} 如何查看字节码 方法一…

【Linux刷题练习】

题目 1 题目&#xff1a;Linux 文件权限 -rwxr-xr-x 是什么意思&#xff0c;怎样变更文件夹以及下面所有文件的拥有者&#xff1f; 正确答案&#xff1a;A 知识点&#xff1a; 文件权限&#xff1a; -rwxr-xr-x 表示文件权限&#xff1a; 第一个 - 表示文件类型&#xff0c;…