springboot 通过自定义注解方式动态控制日志级别进行日志的输出或者关闭

news2024/10/11 20:27:46

1.创建一个日志配置文件用来更改日志的级别

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;

@Component
public class LoggingConfig 

     /**
     * 更改日志级别
     * @param loggerName 日志输出类的路径
     * @param level 级别 debug,warn,info,error,off
     */
    public void setLoggingLevel(String loggerName,String level) {
        Logger logger = LoggerFactory.getLogger(loggerName);
        // 将日志级别转换为Logback的级别
        ch.qos.logback.classic.Logger logbackLogger = (ch.qos.logback.classic.Logger) logger;
        // 设置日志级别
        logbackLogger.setLevel(ch.qos.logback.classic.Level.toLevel(level));
    }
}

通过调用setLoggingLevel方法进行更改日志级别

如果有多个类需要同时设置相同的日志级别比如系统中有多个不同协议的服务,通服务下相关的类设置相同的日志级别进行日志的输出或者关闭。可以使用自定义注解进行动态统一设置。

1.创建自定义一个注解类

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface LogControl {

}

2.创建一个注解配置类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.List;

/**
 * 信号灯日志注解配置
 * yxw
 * @date 2024-10-11
 */
@Configuration
public class AnnotationConfig {

    @Autowired
    private List<Object> components;

    private List<String> classNames = new ArrayList<>();

    @PostConstruct
    public void postConstruct() {
        for (Object component : components) {
            Class<?> clazz = component.getClass();
            if (clazz.isAnnotationPresent(NettyServerLogControl.class)) {
                classNames.add(clazz.getName());
            }
        }

    }
    
}

3.在指定的类上添加注解

@Component
@LogControl 
public class ServerControl {
 public void init() {
     log.info("Tcp服务数据解析");
 }

}

4.调用方式

编写一个方法,循环注解自动注入的类名然后调用LoggingConfig 中的setLoggingLevel方法

			for (String className : classNames) {
                                    loggingConfig.setLoggingLevel(className,level);
                                }

注意:以上方法要灵活运用比如调用方式可以通过一个接口进行控制,如果有参数页面可以创建一个日志级别的参数,写一个completagbleFuture异步线程进行实时监控参数然后调用修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java—继承性与多态性

目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…

使用node.js控制CMD命令——修改本机IP地址

设置每次打开cmd命令行窗口都是以管理员身份运行&#xff1a; 1. 按下Ctrl Shift Esc键组合&#xff0c;打开任务管理器。 2. 在任务管理器中&#xff0c;点击“文件”菜单&#xff0c;选择“运行新任务”。 3. 在“创建新任务”对话框中&#xff0c;输入cmd&#xff0c;勾…

无人机之信息管理系统篇

一、系统概述 无人机信息管理系统通过整合软件和硬件设备&#xff0c;实现对无人机的全面监控、管理、调度和数据分析。它能够帮助用户实时掌握无人机的飞行状态、位置信息等重要数据&#xff0c;确保飞行安全和隐私保护。 二、系统组成 无人机信息管理系统通常由以下几个关键…

达梦8-SQL日志配置与分析工具

以 dmsql_数据库实例名.log 类型命名的文件为跟踪日志文件&#xff0c;跟踪日志内容包含系统各会话执行的 SQL 语句、参数信息、错误信息等。跟踪日志主要用于分析错误和分析性能问题&#xff0c;比如&#xff0c;可以挑出系统现在执行速度较慢的 SQL 语句&#xff0c;进而对其…

React学习过程(持续更新......)

React学习过程&#xff08;持续更新…&#xff09; 创建react的hello项目 使用node创建create-react-app脚手架项目 //首先你得先安装node&#xff0c;这里不做详细教程&#xff0c;我使用的node为20.18.0 npm isntall create-react-app -g //全局安装create-react-app crea…

Web安全常用工具 (持续更新)

前言 本文虽然是讲web相关工具&#xff0c;但在在安全领域&#xff0c;没有人是先精通工具&#xff0c;再上手做事的。鉴于web领域繁杂戎多的知识点&#xff08;工具是学不完的&#xff0c;哭&#xff09;&#xff0c;如果你在本文的学习过程中遇到没有学过的知识点&#xff0…

【笔记】Day2.3.2数据校验

此项目中有两种数据校验方式 1.hibernate-validated注解方式 在controller头上开启数据校验模式需要加入Validated 然后就可以 在参数前面加入任意的数据校验里的注解 例如;:NotNull() NotEmpty()等 面对字符串型的数据校验 参数前可以使用NotBlank()等 而面对对象/DTO实体的…

mongodb GUI工具(NoSQLBooster)

介绍 跨平台的MongoDB GUI工具&#xff0c;支持Windows、macOS和Linux。自带服务器监控工具、Visual Explain Plan、查询构建器、SQL查询等功能。提供免费版本&#xff0c;但功能相比付费版本有所限制。 免费版可供个人/商业使用&#xff0c;但功能有限。 安装成功后&#x…

让你的Mac电脑风扇工作起来,能够控制风扇的实用小工具

不知道你们有没有这个苦恼&#xff0c;Mac电脑明明自带散热风扇&#xff0c;但是很少工作&#xff0c;所以总是会有发热的问题&#xff0c;虽然电脑支架能够一定程度解决热量无法散出的问题&#xff0c;但是总归是不如风扇工作散热的效果好 那么如何让你的Mac风扇工作起来呢&a…

UE4 材质学习笔记08(雨滴流淌着色器/雨水涟漪着色器)

一.雨滴流淌着色器 法线贴图在红色通道和绿色通道上&#xff0c;那是法线的X轴和Y轴&#xff0c;在蓝色通道中 我有个用于雨滴流淌的蒙版&#xff0c;在Alpha通道中&#xff0c;有个时间偏移蒙版。这些贴图都是可以在PS上制作做来的&#xff0c;雨滴流淌图可以直接用笔刷画出来…

ModelMapper的常见用法 ,号称是beanUtils.copyProp....的升级版??,代码复制粘贴即可复现效果,so convenient

官网案例 以下将官网案例做一个解释 1&#xff09;快速入门 递归遍历源对象的属性拷贝给目标对象 拷贝对象下对象的属性值 Data class Order {private Customer customer;private Address billingAddress; }Data class Customer {private Name name; }Data class Name {pr…

ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。

场景&#xff1a; 虚拟机新创建一个最小化的ubuntu服务器&#xff0c;使用finalshell连接服务&#xff0c;发现连接不上。 1. 查看防火墙ufw 是否开启&#xff0c;22端口是否放行 2. 查看是否安装openssh server, 并配置 我的问题是安装了openssh server 但是没有配置root可…

计算湘军,征程无限!麒麟信安受邀出席2024世界计算大会

2024世界计算大会 9月24日上午&#xff0c;以“智算万物 湘约未来——算出新质生产力”为主题的2024世界计算大会在长沙开幕。中共湖南省委书记沈晓明出席&#xff0c;中共湖南省委副书记、省人民政府省长毛伟明致欢迎辞&#xff0c;工业和信息化部党组成员谢远生出席并致辞&am…

fastdfs下的doc文件可以访问,但是图片无法访问报错404,解决记录

fastdfs下的doc文件可以访问,但是图片无法访问报错404 以下内容主要讲linux的问题 以下内容主要讲linux的问题 以下内容主要讲linux的问题 以下内容主要讲linux的问题 以下内容主要讲linux的问题 第1项:查看Nginx的日志 可以先去查看Nginx的日志,在你Nginx的安装目录下的lo…

一分钟带你了解巧手打字通在线学习平台

巧手打字通平台简介 巧手打字通是一个专为打字初学者&#xff0c;特别是中小学生量身设计的在线打字练习平台。该平台通过科学、有趣且高效的教学方式&#xff0c;帮助用户快速掌握打字技巧&#xff0c;提升打字速度和准确率。 打字学习路径 平台提供了整套的从入门到精通的…

BTB结构分析

I-BTB 每个entry对应一条指令&#xff1b;IBTB相较于其他的结构&#xff0c;有最大的tag开销&#xff0c;因为每个entry都有tag域段&#xff1b;entry内部没有冗余信息&#xff0c;每个信息都是必须的&#xff0c;同时每个entry的内容都不会有重复&#xff1b;每分配一个新的br…

过拟合 overfitting

from [Approaching Any Machine Learning Problem] 人话理解 过拟合的重点在于在训练集上的表现上升&#xff0c;而测试集的表现没有像在训练集上表现的这么好&#xff0c;就算过拟合。分的细的话可以分为测试集表现下降和保持稳定&#xff0c;或者小幅度上升。 详细上下文 …

PAT甲级-1013 Battle Over Cities

题目 题目大意 给定一个城市图&#xff0c;如果攻陷一个城市&#xff0c;该城市连接的所有路都要被销毁。要求计算出连通剩余的城市最少需要修建几条路。该图有n个顶点&#xff0c;m条边&#xff0c;k个重点城市。分别求出每个重点城市被攻陷&#xff0c;连通剩余城市需要修建…

ALV 和 导出 Excel 导出负号前置

CONVERSION_EXIT_Z0001_OUTPUT FUNCTION conversion_exit_z0001_output. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" IMPORTING *" REFERENCE(INPUT) *" EXPORTING *"…

javafx中root的invoke方法报错Method too large问题记录

问题描述   在使用javafx绘制PC桌面程序页面时&#xff0c;使用到了tableview&#xff0c;tableview可以很方便的维护一个可编辑的表&#xff0c;简易代码如下。 var bomList observableListOf<BomContent.BomsInfo>()tableview(bomList) {column("客户名称"…