关于logback日志级别动态切换的四种方式

 更新时间:2023年08月28日 09:42:15   作者:lipengxs  
这篇文章主要介绍了关于logback日志级别动态切换的四种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

生产环境中经常有需要动态修改日志级别。

现在就介绍几种方案

方案一:开启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

代码如下

/**
 * log api
 * @author lipeng
 */
@RequestMapping("/api/log")
@RestController
public class LogbackController {
    private Logger log = LoggerFactory.getLogger(LogbackController.class);
    /**
     * 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();
    }
}

方案三:springboot引入Actuator

1、pom.xml增加相关依赖

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

2、配置文件中增加配置

如果是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

找到指定的服务中某一个节点

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

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

总结

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

以上仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 学习笔记(入门篇)_程序流程控制结构和方法

    java 学习笔记(入门篇)_程序流程控制结构和方法

    程序流程控制结构分为:顺序、选择、循环以及异常处理结构,语句是程序的基本组成单位,一般来说语句的执行流程是按顺序来进行的,但是当遇到一些特殊的条件,比如循环,这时候语句就会按照流程控制结构来进行了
    2013-01-01
  • Java生成短8位UUID的实现方案

    Java生成短8位UUID的实现方案

    在Java中,UUID通常用于生成全局唯一的标识符,标准的UUID是128位的,由32个十六进制数字组成,并通过特定的算法保证其在全球范围内的唯一性,本文给大家介绍了一个简单的Java方法,用于生成一个较短的8位UUID,需要的朋友可以参考下
    2025-01-01
  • IDEA插件推荐之Maven-Helper的教程图解

    IDEA插件推荐之Maven-Helper的教程图解

    这篇文章主要介绍了IDEA插件推荐之Maven-Helper的相关知识,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考
    2020-07-07
  • Maven项目打包成可执行Jar文件步骤解析

    Maven项目打包成可执行Jar文件步骤解析

    这篇文章主要介绍了Maven项目如何打包成可执行Jar文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java中使用Socket发送Java对象实例

    Java中使用Socket发送Java对象实例

    这篇文章主要介绍了Java中使用Socket发送Java对象实例,本文使用对象流直接发送对象,本文同时给出代码实例,需要的朋友可以参考下
    2015-05-05
  • Spring AOP入门Demo分享

    Spring AOP入门Demo分享

    这篇文章主要介绍了Spring AOP入门Demo分享,涉及创建maven项目,编写切面类,通过bean配置关联等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • java页面中文乱码的解决办法

    java页面中文乱码的解决办法

    做java开发的朋友碰到最多的就是中文乱码这个问题了,下面介绍页面提交时与url中文乱码的一些解决办法
    2013-11-11
  • IDEA中SpringBoot项目的yml多环境配置方式

    IDEA中SpringBoot项目的yml多环境配置方式

    这篇文章主要介绍了IDEA中SpringBoot项目的yml多环境配置,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • Spring中@Autowired和@Resource注解的使用区别详解

    Spring中@Autowired和@Resource注解的使用区别详解

    这篇文章主要介绍了Spring中@Autowired和@Resource注解的使用区别详解,@Autowired默认根据type进行注入,找到与指定类型兼容的 Bean 并进行注入,如果无法通过type匹配到对应的 Bean 的话,会根据name进行匹配,如果都匹配不到则抛出异常,需要的朋友可以参考下
    2023-11-11
  • Java 8中的Collectors API介绍

    Java 8中的Collectors API介绍

    这篇文章主要介绍了Java 8中的Collectors API,Stream.collect()是Java 8的流API的终端方法之一。它允许我们对流实例中保存的数据元素执行可变折叠操作,下文相关内容需要的小伙伴可以参考一下
    2022-04-04

最新评论