增加日志配置选项支持,优化日志初始化与数据库日志记录

This commit is contained in:
2026-01-27 10:32:43 +08:00
parent 729d335a69
commit e6e6d3b222
11 changed files with 220 additions and 11 deletions

View File

@@ -2,14 +2,61 @@ package util
import (
"os"
"path/filepath"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var Logger *zap.Logger
var DBLogger *zap.Logger
func InitLogger(level string) {
// LogConfig 定义日志配置接口,避免循环依赖
type LogConfig interface {
GetLevel() string
GetFilename() string
GetDBFilename() string
GetMaxSize() int
GetMaxBackups() int
GetMaxAge() int
GetCompress() bool
GetLogConsole() bool
GetShowDBLog() bool
GetDBLogLevel() string
}
func InitLogger(cfg LogConfig) {
// 确保日志目录存在
if cfg.GetFilename() != "" {
_ = os.MkdirAll(filepath.Dir(cfg.GetFilename()), 0755)
}
if cfg.GetDBFilename() != "" {
_ = os.MkdirAll(filepath.Dir(cfg.GetDBFilename()), 0755)
}
Logger = createZapLogger(
cfg.GetLevel(),
cfg.GetFilename(),
cfg.GetMaxSize(),
cfg.GetMaxBackups(),
cfg.GetMaxAge(),
cfg.GetCompress(),
cfg.GetLogConsole(),
)
DBLogger = createZapLogger(
cfg.GetDBLogLevel(),
cfg.GetDBFilename(),
cfg.GetMaxSize(),
cfg.GetMaxBackups(),
cfg.GetMaxAge(),
cfg.GetCompress(),
cfg.GetShowDBLog(),
)
}
func createZapLogger(level, filename string, maxSize, maxBackups, maxAge int, compress, logConsole bool) *zap.Logger {
var zapLevel zapcore.Level
switch level {
case "debug":
@@ -28,11 +75,33 @@ func InitLogger(level string) {
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
core := zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig),
zapcore.AddSync(os.Stdout),
zapLevel,
)
var cores []zapcore.Core
Logger = zap.New(core, zap.AddCaller())
// 文件输出
if filename != "" {
w := zapcore.AddSync(&lumberjack.Logger{
Filename: filename,
MaxSize: maxSize,
MaxBackups: maxBackups,
MaxAge: maxAge,
Compress: compress,
})
cores = append(cores, zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig),
w,
zapLevel,
))
}
// 控制台输出
if logConsole {
cores = append(cores, zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig),
zapcore.AddSync(os.Stdout),
zapLevel,
))
}
core := zapcore.NewTee(cores...)
return zap.New(core, zap.AddCaller())
}