u
This commit is contained in:
1 parent
3420976bd6
commit
ad47e5167b
8 files changed
+184
-70
No files matched your search
@@ -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)
|
||||
}
|
||||
|
||||
// ======================
|
||||
// 优雅退出
|
||||
// ======================
|
||||
|
||||
Reference in new issue
Block a user