• springboot 1.5.x中的动态切换日志级别


    logback是一套日志框架,由log4j的优化版,由同一个作者开发,在速度和性能上都超过其他日志框架,再结合slf4j,已成为当前最流行的日志框架。

    一、springboot中使用logback

    springboot中使用logback日志的详细配置说明见:https://blog.csdn.net/appleyk/article/details/78717388

    二、springboot中的日志级别动态调整

    2.1、Spring Boot 1.5.x中引入的一个新的控制端点:/loggers来管理

    Spring Boot 1.5.x中引入的一个新的控制端点:/loggers,该端点将为我们提供动态修改Spring Boot应用日志级别的强大功能。该功能的使用非常简单,它依然延续了Spring Boot自动化配置的实现,所以只需要在引入了spring-boot-starter-actuator依赖的条件下就会自动开启该端点的功能,详细方法见:

    http://blog.didispace.com/spring-boot-1-5-x-feature-1/

    2.2、通过Logger动态设置

    (1)原理

           日志框架中有一个工厂类:LoggerFactory,在这个类中可以获取到当前日志的上下文对象LoggerContext,通过LoggerContext可以获取到指定包的Logger ,通过Logger对象那就无所不能了。

    引入的jar

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import ch.qos.logback.classic.Level;
    import ch.qos.logback.classic.LoggerContext;
    import io.swagger.annotations.Api;

    代码:

    @RestController("/logconfig")
    @Api(value = "LogConfigController", description="LogConfigController")
    public class LogConfigController {
        
        private static final Logger LOG = LoggerFactory.getLogger(LogConfigController.class);
        
        @RequestMapping(value = "/getLoglevel")
        public Level getLoglevel(@RequestParam(value = "package") String packageName) throws Exception {
            LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
            LOG.trace("trace getLoglevel({})={}", packageName, loggerContext.getLogger(packageName).getLevel());
            LOG.debug("debug getLoglevel({})={}", packageName, loggerContext.getLogger(packageName).getLevel());
            LOG.info("info getLoglevel({})={}", packageName, loggerContext.getLogger(packageName).getLevel());
            LOG.warn("warn getLoglevel({})={}", packageName, loggerContext.getLogger(packageName).getLevel());
            return loggerContext.getLogger(packageName).getLevel();
        }
    
        @RequestMapping(value = "/loglevel/{loglevel}")
        public String loglevel(@PathVariable("loglevel") String logLevel,
                @RequestParam(value = "package") String packageName) throws Exception {
            // trace --> debug --> info --> warn --> error -->fatal
            LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
            loggerContext.getLogger(packageName).setLevel(Level.valueOf(logLevel));
            return "ok";
        }
    }
    (2)获取当前日志等级getLoglevel():

    这里先获取到了LoggerContext,通过loggerContext,获取到了指定包的Logger对象,通过logger对象中的getLevel()方法获取到当前包的日志级别。

           访问地址:http://localhost:8080/getLoglevel?package=com.kfit可以看到控制台输出:

    {"levelInt":20000,"levelStr":"INFO"}

    (3)修改日志等级loglevel()

     这里获取到LoggerContext之后,通过getLogger(packageName)获取到logger对象,通过logger对象的setLevel()方法,修改当前包的日志级别。

     

     
  • 相关阅读:
    oracle常用命令(比较常见好用)
    vim编辑器详解
    对话框和打印控件
    winform弹出唯一的窗体
    ListView
    菜单栏和布局
    窗体属性和公共控件
    ASPCMS和WPF
    MVC
    正则表达式
  • 原文地址:https://www.cnblogs.com/duanxz/p/3891477.html
Copyright © 2020-2023  润新知