Fork me on GitHub

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


微信公众号

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

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