nacos-naming 模块日志设计实现及思想

nacos作为注册中心,naming模块是其实现的主要位置,这里发现其日志实现比较有特色,简单讲一下。

一.日志类

模块位置如下:
不同的模块使用不通的日志路径做区分,直接上代码,

public class Loggers {

    public static final Logger PUSH = LoggerFactory.getLogger("com.alibaba.nacos.naming.push");

    public static final Logger CHECK_RT = LoggerFactory.getLogger("com.alibaba.nacos.naming.rt");

    public static final Logger SRV_LOG = LoggerFactory.getLogger("com.alibaba.nacos.naming.main");

    public static final Logger EVT_LOG = LoggerFactory.getLogger("com.alibaba.nacos.naming.event");

    public static final Logger RAFT = LoggerFactory.getLogger("com.alibaba.nacos.naming.raft");

    public static final Logger DISTRO = LoggerFactory.getLogger("com.alibaba.nacos.naming.distro");

    public static final Logger PERFORMANCE_LOG = LoggerFactory.getLogger("com.alibaba.nacos.naming.performance");

    public static void setLogLevel(String logName, String level) {

        switch (logName) {
            case "naming-push":
                ((ch.qos.logback.classic.Logger) PUSH).setLevel(Level.valueOf(level));
                break;
            case "naming-rt":
                ((ch.qos.logback.classic.Logger) CHECK_RT).setLevel(Level.valueOf(level));
                break;
            case "naming-server":
                ((ch.qos.logback.classic.Logger) SRV_LOG).setLevel(Level.valueOf(level));
                break;
            case "naming-event":
                ((ch.qos.logback.classic.Logger) EVT_LOG).setLevel(Level.valueOf(level));
                break;
            case "naming-raft":
                ((ch.qos.logback.classic.Logger) RAFT).setLevel(Level.valueOf(level));
                break;
            case "naming-distro":
                ((ch.qos.logback.classic.Logger) DISTRO).setLevel(Level.valueOf(level));
                break;
            case "naming-performance":
                ((ch.qos.logback.classic.Logger) PERFORMANCE_LOG).setLevel(Level.valueOf(level));
                break;
            default:
                break;
        }

    }
}

二.日志级别动态控制

后面通过暴漏的controller接口控制每个的日志的等级

	@RequestMapping("/nacos/v1/ns/operator")
	public Class OperatorController {
		 @PutMapping("/log")
   		 public String setLogLevel(@RequestParam String logName, @RequestParam String logLevel) {
        	Loggers.setLogLevel(logName, logLevel);
         return "ok";
    	}
	}

通过这种方式可以控制某个模块下日志的打印级别,方便在排查问题的时候动态的调整日志的输出级别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值