zoukankan      html  css  js  c++  java
  • 动态修改logback日志级别

    package com.chinasofti.cloudeasy.api.web;
    
    import org.slf4j.LoggerFactory;
    import org.springframework.util.StringUtils;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import ch.qos.logback.classic.Level;
    import ch.qos.logback.classic.LoggerContext;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiImplicitParams;
    import io.swagger.annotations.ApiOperation;
    import lombok.extern.slf4j.Slf4j;
    
    @Api(tags = "动态修改日志级别")
    @RequestMapping("api/v1/monitor")
    @RestController
    @Slf4j
    public class LogController {
    
        /**
         * 修改项目日志输出级别
         * 
         * @param allLevel 全局日志级别
         * @param singleLevel 某个类日志级别
         * @param singlePath 需要单独设置日志输出级别的类的全限定名(例:com.chinasofti.cloudeasy.api.web.LogController)
         * @return
         */
        @ApiOperation(value = "changeLogLevel")
        @GetMapping("changeLevel")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "rootLevel",
                        value = "root,全局级别:ALL,TRACE,DEBUG,INFO,WARN,ERROR,OFF", required = false),
                @ApiImplicitParam(name = "singleLevel",
                        value = "单独设置类日志级别:ALL,TRACE,DEBUG,INFO,WARN,ERROR,OFF", required = false),
                @ApiImplicitParam(name = "singlePath",
                        value = "单独类路径:com.chinasofti.cloudeasy.api.web.LogController",
                        required = false)})
        public String changeLevel(String rootLevel, String singleLevel, String singlePath) {
            LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
            log.warn("set log rootLevel:{},singleLevel:{},singlePath:{}", rootLevel, singleLevel,
                    singlePath);
            if (!StringUtils.isEmpty(rootLevel)) {
                // 设置全局日志级别
                ch.qos.logback.classic.Logger logger = loggerContext.getLogger("root");
                logger.setLevel(Level.toLevel(rootLevel));
            }
    
            if (!StringUtils.isEmpty(singleLevel)) {
                // 设置某个类日志级别-可以实现定向日志级别调整
                ch.qos.logback.classic.Logger vLogger = loggerContext.getLogger(singlePath);
                if (vLogger != null) {
                    vLogger.setLevel(Level.toLevel(singleLevel));
                }
            }
            return "success";
        }
    }
    

      

  • 相关阅读:
    多个数字和数字字符串混合运算规则
    关于js对象引用的小例子
    实现函数 isInteger(x) 来判断 x 是否是整数
    写一个少于 80 字符的函数,判断一个字符串是不是回文字符串
    关于数组排序
    事件委托(事件代理)的原理以及优缺点是什么?
    将url的查询参数解析成字典对象
    js dom操作获取节点的一些方法
    js中arguments的应用
    深度克隆---js对象引用
  • 原文地址:https://www.cnblogs.com/yaoyu1983/p/12788202.html
Copyright © 2011-2022 走看看