7

玩转高性能日志库zap (1)

 3 years ago
source link: http://vearne.cc/archives/649
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | 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组件


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

微信支付码

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK