feat: logger change to zap

This commit is contained in:
engigu
2026-02-07 21:54:54 +08:00
parent f746c871fa
commit 26a802b85c
4 changed files with 144 additions and 80 deletions
+51 -21
View File
@@ -2,20 +2,18 @@ package main
import (
"fmt"
"io"
"os"
"path/filepath"
"strings"
"github.com/sirupsen/logrus"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
// 日志实例
var log = logrus.New()
// CustomFormatter 自定义日志格式
type CustomFormatter struct{}
var loggerInstance *zap.Logger
var log *zap.SugaredLogger
// ANSI 颜色代码
const (
@@ -26,26 +24,52 @@ const (
colorGray = "\033[37m"
)
func (f *CustomFormatter) Format(entry *logrus.Entry) ([]byte, error) {
timestamp := entry.Time.Format("2006-01-02 15:04:05")
level := strings.ToUpper(entry.Level.String())
// customCore 实现 zapcore.Core 以提供与 logrus 一模一样的格式
type customCore struct {
level zapcore.LevelEnabler
writer zapcore.WriteSyncer
}
func (c *customCore) Enabled(l zapcore.Level) bool {
return c.level.Enabled(l)
}
func (c *customCore) With(fields []zapcore.Field) zapcore.Core {
return c
}
func (c *customCore) Check(ent zapcore.Entry, ce *zapcore.CheckedEntry) *zapcore.CheckedEntry {
if c.Enabled(ent.Level) {
return ce.AddCore(ent, c)
}
return ce
}
func (c *customCore) Write(ent zapcore.Entry, fields []zapcore.Field) error {
timestamp := ent.Time.Format("2006-01-02 15:04:05")
level := strings.ToUpper(ent.Level.String())
var levelColor string
switch entry.Level {
case logrus.DebugLevel, logrus.TraceLevel:
switch ent.Level {
case zapcore.DebugLevel:
levelColor = colorGray
case logrus.InfoLevel:
case zapcore.InfoLevel:
levelColor = colorBlue
case logrus.WarnLevel:
case zapcore.WarnLevel:
levelColor = colorYellow
case logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel:
case zapcore.ErrorLevel, zapcore.DPanicLevel, zapcore.PanicLevel, zapcore.FatalLevel:
levelColor = colorRed
default:
levelColor = colorBlue
}
msg := fmt.Sprintf("[%s]%s[%s]%s %s\n", timestamp, levelColor, level, colorReset, entry.Message)
return []byte(msg), nil
msg := fmt.Sprintf("[%s]%s[%s]%s %s\n", timestamp, levelColor, level, colorReset, ent.Message)
_, err := c.writer.Write([]byte(msg))
return err
}
func (c *customCore) Sync() error {
return c.writer.Sync()
}
func initLogger(logFile string, fileOnly bool) {
@@ -54,9 +78,6 @@ func initLogger(logFile string, fileOnly bool) {
os.MkdirAll(logDir, 0755)
}
log.SetFormatter(&CustomFormatter{})
log.SetLevel(logrus.InfoLevel)
lumberjackLogger := &lumberjack.Logger{
Filename: logFile,
MaxSize: 5,
@@ -65,11 +86,20 @@ func initLogger(logFile string, fileOnly bool) {
Compress: false,
}
var output zapcore.WriteSyncer
// fileOnly 模式下只输出到文件(daemon 模式或重启模式)
if fileOnly {
log.SetOutput(lumberjackLogger)
output = zapcore.AddSync(lumberjackLogger)
} else {
// 前台运行时同时输出到终端和文件
log.SetOutput(io.MultiWriter(os.Stdout, lumberjackLogger))
output = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(lumberjackLogger))
}
core := &customCore{
level: zap.NewAtomicLevelAt(zap.InfoLevel),
writer: output,
}
loggerInstance = zap.New(core)
log = loggerInstance.Sugar()
}