玩转高性能日志库zap (1)
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://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组件
不错
可以,一直想要这个功能