版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

前言

uber开源的高性能日志库zap, 除了性能远超logrus之外,还有很多诱人的功能,比如支持数据采样、支持通过HTTP服务动态调整日志级别

参考资料1虽然提到了可以通过HTTP服务动态调整日志级别,但是没有给出可用的代码实现,这里给出一个样例。

动态调整日志级别

非常简单直接上代码

package main

import (
	"fmt"
	"go.uber.org/zap"
	"net/http"
	"time"
)

func main() {
	alevel := zap.NewAtomicLevel()
	http.HandleFunc("/handle/level", alevel.ServeHTTP)
	go func() {
		if err := http.ListenAndServe(":9090", nil); err != nil {
			panic(err)
		}
	}()
	// 默认是Info级别
	logcfg := zap.NewProductionConfig()
	logcfg.Level = alevel

	logger, err := logcfg.Build()
	if err != nil {
		fmt.Println("err", err)
	}

	defer logger.Sync()
	for i := 0; i < 1000; i++ {
		time.Sleep(1 * time.Second)
		logger.Debug("debug log", zap.String("level", alevel.String()))
		logger.Info("Info log", zap.String("level", alevel.String()))
	}
}

查看日志级别

curl http://localhost:9090/handle/level

输出

{"level":"info"}

调整日志级别(可选值 “debug” “info” “warn” “error” 等)

curl -XPUT --data '{"level":"debug"}' http://localhost:9090/handle/level

输出

{"level":"debug"}

参考资料

1.深度 | 从Go高性能日志库zap看如何实现高性能Go组件


微信公众号