Golang中日志库ZAP

Golang日志库ZAP

// 基础示例
package main

import "go.uber.org/zap"

func main() {
    // 使用预定义的Logger(生产环境推荐)
    logger, _ := zap.NewProduction()
    defer logger.Sync() // 刷新缓冲区的日志
    
    // 记录日志
    logger.Info("这是一个信息日志")
    logger.Warn("这是一个警告日志")
    logger.Error("这是一个错误日志")
}


// 添加自定义字段
// Zap结构化日志(推荐)
    logger.Info("用户登录成功",
        zap.String("username", "Alice"),
        zap.String("ip", "192.168.1.100"),
        zap.String("action", "login"),
        zap.Int("user_id", 12345),
    )

// 预定义字段
func main() {
    logger, _ := zap.NewProduction()
    // 创建带有固定字段的Logger
    loggerWithFields := logger.With(
        zap.String("service", "user-service"),
        zap.String("version", "v1.0.0"),
    )
    defer loggerWithFields.Sync()
    
    // 所有日志都会自动包含上面定义的字段
    loggerWithFields.Info("服务启动",
        zap.Int("port", 8080),
    )
}


// CONFIG简单定义方法
config := zap.NewProductionConfig()

config.EncoderConfig.TimeKey = "timestamp"
config.EncoderConfig.MessageKey = "message"
config.EncoderConfig.LevelKey = "level"
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
logger, _ := config.Build()

// logger, _ := zap.NewProduction()

loggerWithFields := logger.With(zap.String("version", "v1.0"),zap.String("serviceName", "test app"))

defer loggerWithFields.Sync()

loggerWithFields.Info("这是一个Info信息", zap.String("key", "value"))
loggerWithFields.Warn("这是一个Warn信息")
loggerWithFields.Error("这是一个Error信息") 


// EncoderConfig高级自定义方法
// 只创建编码器配置
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.TimeKey = "@timestamp"
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.MessageKey = "log_message"

// 需要手动创建所有组件
encoder := zapcore.NewJSONEncoder(encoderConfig)
writer := zapcore.AddSync(os.Stdout)
core := zapcore.NewCore(encoder, writer, zapcore.InfoLevel)
logger := zap.New(core)
defer logger.Sync()
logger.Info("", zap.String("encoder key", "encoder value"))

posted @ 2026-02-05 23:29  shuix1ng  阅读(3)  评论(0)    收藏  举报