refactor: 添加 logger 模块并优化客户端实例清理逻辑

- 新增 logger 模块,统一使用 zap.SugaredLogger
- 将 config_api.go 中的 fmt.Printf 改为 logger.SugaredLogger.Errorf
- 客户端实例清理逻辑改为定时任务(每分钟执行)
- 清理条件改为 last_ping_at 超过 5 分钟
This commit is contained in:
2026-05-02 21:01:26 +08:00
parent 8957286bb5
commit 9a7679960c
5 changed files with 85 additions and 5 deletions
+2 -5
View File
@@ -1,8 +1,8 @@
package handler
import (
"fmt"
"kenaito-conf/server/internal/dao"
"kenaito-conf/server/internal/logger"
"kenaito-conf/server/internal/model"
"kenaito-conf/server/internal/service"
"net/http"
@@ -242,14 +242,11 @@ func (h *ConfigApiHandler) recordClientInstances(ip string, configIds []int, app
}
_, err := dao.Engine.Insert(&instance)
if err != nil {
fmt.Printf("[recordClientInstances] insert error: %v\n", err)
logger.SugaredLogger.Errorf("[recordClientInstances] insert error: %v", err)
continue
}
}
}
// cleanup records older than 5 minutes
fiveMinutesAgo := now.Add(-5 * time.Minute)
dao.Engine.Where("last_ping_at < ?", fiveMinutesAgo).Delete(&model.ClientInstance{})
}
// func (h *ConfigApiHandler) Ping(c *gin.Context) {
+57
View File
@@ -0,0 +1,57 @@
package logger
import (
"os"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var globalLogger *zap.Logger
// SugaredLogger 全局 SugaredLogger,任意位置可直接使用
var SugaredLogger *zap.SugaredLogger
// 初始化全局日志(控制台 + application.log 轮转文件)
func init() {
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stack",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalColorLevelEncoder,
EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05"))
},
EncodeDuration: zapcore.StringDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
// 日志轮转配置
lumberjackLogger := &lumberjack.Logger{
Filename: "application.log",
MaxSize: 100, // 每个日志文件最大 100MB
MaxBackups: 5, // 最多保留 5 个旧日志文件
MaxAge: 30, // 日志文件最多保留 30 天
Compress: true, // 压缩旧日志
}
// 同时输出到控制台和文件
consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig)
consoleWriter := zapcore.AddSync(os.Stdout)
fileWriter := zapcore.AddSync(lumberjackLogger)
core := zapcore.NewTee(
zapcore.NewCore(consoleEncoder, consoleWriter, zap.InfoLevel),
zapcore.NewCore(consoleEncoder, fileWriter, zap.InfoLevel),
)
globalLogger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zap.ErrorLevel))
SugaredLogger = globalLogger.Sugar()
zap.ReplaceGlobals(globalLogger)
}