From 1349a50aee704a8fdd3d2e1bab0ecece86b1dbc5 Mon Sep 17 00:00:00 2001 From: taynpg Date: Mon, 20 Apr 2026 13:52:50 +0800 Subject: [PATCH] =?UTF-8?q?zap=E6=97=A5=E5=BF=97=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- golang/logUse/zap-log.go | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 golang/logUse/zap-log.go diff --git a/golang/logUse/zap-log.go b/golang/logUse/zap-log.go new file mode 100644 index 0000000..bdd9d1a --- /dev/null +++ b/golang/logUse/zap-log.go @@ -0,0 +1,87 @@ +package main + +import ( + "os" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" + "gopkg.in/natefinch/lumberjack.v2" +) + +func main() { + // 创建 lumberjack 文件轮转器 + fileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{ + Filename: "zap.log", + MaxSize: 1, // MB + MaxBackups: 3, // 最多保留3个备份 + MaxAge: 30, // 最大保存天数 + Compress: true, // 是否压缩 + }) + + // 创建多个输出目标 + consoleSyncer := zapcore.Lock(os.Stdout) + fileSyncer := zapcore.Lock(fileWriteSyncer) + + // 配置编码器 + encoderConfig := zapcore.EncoderConfig{ + TimeKey: "time", + LevelKey: "level", + NameKey: "logger", + CallerKey: "caller", + FunctionKey: zapcore.OmitKey, + MessageKey: "msg", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.CapitalColorLevelEncoder, // 控制台带颜色 + EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"), + EncodeDuration: zapcore.SecondsDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + } + + // 文件编码器(无颜色) + fileEncoderConfig := encoderConfig + fileEncoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder // 文件不要颜色 + + // 创建多个 core + consoleCore := zapcore.NewCore( + zapcore.NewConsoleEncoder(encoderConfig), // 控制台用 ConsoleEncoder + consoleSyncer, + zap.InfoLevel, + ) + + fileCore := zapcore.NewCore( + zapcore.NewConsoleEncoder(fileEncoderConfig), // 文件也用 ConsoleEncoder,但无颜色 + fileSyncer, + zap.InfoLevel, + ) + + // 使用 tee 将日志同时输出到控制台和文件 + core := zapcore.NewTee(consoleCore, fileCore) + + // 创建 logger + logger := zap.New(core, zap.AddCaller()) + defer logger.Sync() // 程序退出时刷新缓冲区 + + logger.Info("水电费水电费。") + + sugar := logger.Sugar() + + // 记录日志 + sugar.Info("This is an info message") + sugar.Warn("This is a warning message") + sugar.Error("This is an error message") + + // 测试带字段的日志 + sugar.With( + zap.String("component", "auth"), + zap.Int("user_id", 12345), + zap.String("ip", "192.168.1.100"), + ).Info("User login success") + + // 如果需要更结构化的日志,可以使用非 sugar 版本(性能更高) + // logger.Info("Structured logging example", + // zap.String("component", "api"), + // zap.Int("status", 200), + // zap.Duration("duration", zap.Duration("latency", 150)), + // ) +}