Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | 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组件


如果我的文章对你有帮助,你可以给我打赏以促使我拿出更多的时间和精力来分享我的经验和思考总结。

微信支付码

1 对 “玩转高性能日志库zap (1)”的想法;

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据