From d5d584c93bcd390993c2436a971ddd5cdf6c3910 Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Sat, 13 Jun 2026 15:17:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=20Zap=20=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 internal/logger/logger.go - 提供 Init(level, format) 初始化全局 SugaredLogger - 支持 json/console 两种格式 - 提供 Sync() 刷新缓冲区 --- backend/internal/logger/logger.go | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 backend/internal/logger/logger.go diff --git a/backend/internal/logger/logger.go b/backend/internal/logger/logger.go new file mode 100644 index 0000000..4c113f3 --- /dev/null +++ b/backend/internal/logger/logger.go @@ -0,0 +1,57 @@ +package logger + +import ( + "os" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +// Log 是全局 SugaredLogger,由 Init 初始化。 +var Log *zap.SugaredLogger + +// Init 初始化全局日志器。 +// level: "debug", "info", "warn", "error" +// format: "json" 或 "console" +func Init(level, format string) { + var lvl zapcore.Level + switch level { + case "debug": + lvl = zapcore.DebugLevel + case "warn": + lvl = zapcore.WarnLevel + case "error": + lvl = zapcore.ErrorLevel + default: + lvl = zapcore.InfoLevel + } + + encoderCfg := zap.NewProductionEncoderConfig() + encoderCfg.TimeKey = "ts" + encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder + + var core zapcore.Core + if format == "console" { + core = zapcore.NewCore( + zapcore.NewConsoleEncoder(encoderCfg), + zapcore.AddSync(os.Stdout), + lvl, + ) + } else { + core = zapcore.NewCore( + zapcore.NewJSONEncoder(encoderCfg), + zapcore.AddSync(os.Stdout), + lvl, + ) + } + + logger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel)) + Log = logger.Sugar() +} + +// Sync 刷新缓冲区,退出前调用。 +func Sync() { + if Log != nil { + _ = Log.Sync() + } +}