This commit is contained in:
oneao committed 2026-04-03 17:29:24 +08:00
1 parent 3420976bd6
commit ad47e5167b
8 files changed
+184 -70

No files matched your search

+62 -31
View File
@@ -5,6 +5,7 @@ import (
"os"
"path/filepath"
"strings"
"time"
"github.com/gofiber/fiber/v3"
"go.uber.org/zap"
@@ -59,10 +60,8 @@ func Init(cfg Config) {
// 控制台
consoleWriter := zapcore.AddSync(os.Stdout)
// 文件 writer(info)
// 文件 writer(按天)
infoWriter := getWriter(cfg, "info")
// 文件 writer(error)
errorWriter := getWriter(cfg, "error")
// info core
@@ -85,24 +84,66 @@ func Init(cfg Config) {
core := zapcore.NewTee(infoCore, errorCore)
Log = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
Log = zap.New(
core,
)
}
// ======================
// lumberjack writer
// Daily Writer(核心)
// ======================
type DailyWriter struct {
cfg Config
level string
log *lumberjack.Logger
date string
}
func newDailyWriter(cfg Config, level string) *DailyWriter {
return &DailyWriter{
cfg: cfg,
level: level,
}
}
func (w *DailyWriter) Write(p []byte) (n int, err error) {
today := time.Now().Format("2006-01-02")
// 跨天自动切换
if w.log == nil || w.date != today {
dir := filepath.Join(w.cfg.Dir, w.level)
_ = os.MkdirAll(dir, os.ModePerm)
filename := filepath.Join(dir, today+".log")
w.log = &lumberjack.Logger{
Filename: filename,
MaxSize: w.cfg.MaxSize,
MaxBackups: w.cfg.MaxBackups,
MaxAge: w.cfg.MaxAge,
Compress: w.cfg.Compress,
}
w.date = today
}
return w.log.Write(p)
}
func (w *DailyWriter) Sync() error {
if w.log != nil {
return w.log.Close()
}
return nil
}
// ======================
// writer 封装
// ======================
func getWriter(cfg Config, level string) zapcore.WriteSyncer {
dir := filepath.Join(cfg.Dir, level)
_ = os.MkdirAll(dir, os.ModePerm)
return zapcore.AddSync(&lumberjack.Logger{
Filename: filepath.Join(dir, level+".log"),
MaxSize: cfg.MaxSize,
MaxBackups: cfg.MaxBackups,
MaxAge: cfg.MaxAge,
Compress: cfg.Compress,
})
return zapcore.AddSync(newDailyWriter(cfg, level))
}
// ======================
@@ -123,24 +164,19 @@ func parseLevel(lvl string) zapcore.Level {
}
// ======================
// trace 支持(核心)
// trace 支持
// ======================
// Ctx Fiber 中使用
func Ctx(c fiber.Ctx) *zap.Logger {
func SetTraceID(c fiber.Ctx, traceID string) {
if c == nil {
return Log
return
}
traceID, _ := c.Locals(TraceIDKey).(string)
if traceID == "" {
return Log
}
return Log.With(zap.String("trace_id", traceID))
// context
ctx := context.WithValue(c.Context(), TraceIDKey, traceID)
c.SetContext(ctx)
}
// FromCtx Service / Repo 使用
func FromCtx(ctx context.Context) *zap.Logger {
if ctx == nil {
return Log
@@ -154,11 +190,6 @@ func FromCtx(ctx context.Context) *zap.Logger {
return Log.With(zap.String("trace_id", traceID))
}
// WithTrace 注入 trace
func WithTrace(ctx context.Context, traceID string) context.Context {
return context.WithValue(ctx, TraceIDKey, traceID)
}
// ======================
// 优雅退出
// ======================