Skip to content

基本使用 ​

Zap 是 Uber 开源的高性能日志库。

创建 Logger ​

预设 Logger ​

go
package main

import (
    "go.uber.org/zap"
)

func main() {
    logger, _ := zap.NewProduction()
    defer logger.Sync()
    
    logger.Info("hello zap",
        zap.String("key", "value"),
        zap.Int("count", 42),
    )
}

开发环境 Logger ​

go
logger, _ := zap.NewDevelopment()
logger.Info("开发日志",
    zap.String("env", "dev"),
)

示例环境 Logger ​

go
logger := zap.NewExample()
logger.Info("示例日志")

日志级别 ​

支持的日志级别 ​

go
logger.Debug("调试信息")
logger.Info("普通信息")
logger.Warn("警告信息")
logger.Error("错误信息")
logger.DPanic("严重错误(开发环境panic)")
logger.Panic("严重错误(总是panic)")
logger.Fatal("致命错误(调用os.Exit(1))")

设置日志级别 ​

go
config := zap.NewProductionConfig()
config.Level = zap.NewAtomicLevelAt(zap.DebugLevel)

logger, _ := config.Build()
logger.Debug("调试信息")

字段类型 ​

基本类型 ​

go
logger.Info("基本类型",
    zap.String("string", "hello"),
    zap.Int("int", 42),
    zap.Int64("int64", 123456789),
    zap.Float64("float64", 3.14),
    zap.Bool("bool", true),
)

复杂类型 ​

go
logger.Info("复杂类型",
    zap.Time("time", time.Now()),
    zap.Duration("duration", 5*time.Second),
    zap.Error(errors.New("错误信息")),
    zap.Strings("strings", []string{"a", "b", "c"}),
    zap.Ints("ints", []int{1, 2, 3}),
)

对象类型 ​

go
user := struct {
    Name string
    Age  int
}{
    Name: "张三",
    Age:  25,
}

logger.Info("对象",
    zap.Any("user", user),
    zap.Reflect("reflect", user),
)

格式化日志 ​

Sugar Logger ​

go
sugar := logger.Sugar()
sugar.Infow("格式化日志",
    "key", "value",
    "count", 42,
)
sugar.Infof("格式化: %s, %d", "hello", 42)
sugar.Info("简单日志")

参考:https://pkg.go.dev/go.uber.org/zap