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"))

浙公网安备 33010602011771号