From 37af6411fd51ec9f84b404930fc90859b5cca824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Fri, 8 Sep 2023 12:11:47 +0800 Subject: [PATCH] - update log --- utils/golog/api_slog.go | 56 ++++++++++++++++------------- utils/golog/gin.custom.config.go | 9 +++++ utils/golog/slog.go | 61 +++++++++++++++++++------------- 3 files changed, 77 insertions(+), 49 deletions(-) diff --git a/utils/golog/api_slog.go b/utils/golog/api_slog.go index bd5b1dfb..99155356 100644 --- a/utils/golog/api_slog.go +++ b/utils/golog/api_slog.go @@ -12,28 +12,29 @@ import ( "github.com/dtapps/go-library/utils/gourl" "gopkg.in/natefinch/lumberjack.v2" "log/slog" + "os" "runtime" ) type ApiSLogFun func() *ApiSLog type ApiSLogConfig struct { - LogPath string // 日志文件路径 - LogName string // 日志文件名 - MaxSize int // 单位为MB,默认为512MB - MaxBackups int // 保留旧文件的最大个数 - MaxAge int // 文件最多保存多少天 0=不删除 - LocalTime bool // 采用本地时间 - Compress bool // 是否压缩日志 - ShowLine bool // 显示代码行 + LogPath string // 日志文件路径 + LogName string // 日志文件名 + MaxSize int // 单位为MB,默认为512MB + MaxBackups int // 保留旧文件的最大个数 + MaxAge int // 文件最多保存多少天 0=不删除 + LocalTime bool // 采用本地时间 + Compress bool // 是否压缩日志 + ShowLine bool // 显示代码行 + LogSaveFile bool // 是否保存到文件 } type ApiSLog struct { - config *ApiSLogConfig - lumberjackLogger lumberjack.Logger - jsonHandler *slog.JSONHandler - logger *slog.Logger - systemConfig struct { + config *ApiSLogConfig + jsonHandler *slog.JSONHandler + logger *slog.Logger + systemConfig struct { systemHostname string // 主机名 systemOs string // 系统类型 systemKernel string // 系统内核 @@ -48,15 +49,6 @@ func NewApiSlog(ctx context.Context, config *ApiSLogConfig) *ApiSLog { sl := &ApiSLog{config: config} - sl.lumberjackLogger = lumberjack.Logger{ - Filename: sl.config.LogPath + sl.config.LogName, // ⽇志⽂件路径 - MaxSize: sl.config.MaxSize, // 单位为MB,默认为512MB - MaxAge: sl.config.MaxAge, // 文件最多保存多少天 - MaxBackups: sl.config.MaxBackups, // 保留旧文件的最大个数 - LocalTime: sl.config.LocalTime, // 采用本地时间 - Compress: sl.config.Compress, // 是否压缩日志 - } - opts := slog.HandlerOptions{ AddSource: sl.config.ShowLine, Level: slog.LevelDebug, @@ -69,9 +61,22 @@ func NewApiSlog(ctx context.Context, config *ApiSLogConfig) *ApiSLog { }, } - sl.jsonHandler = slog.NewJSONHandler(&sl.lumberjackLogger, &opts) - - sl.logger = slog.New(sl.jsonHandler) + // 是否保存到文件 + if sl.config.LogSaveFile { + lumberjackLogger := lumberjack.Logger{ + Filename: sl.config.LogPath + sl.config.LogName, // ⽇志⽂件路径 + MaxSize: sl.config.MaxSize, // 单位为MB,默认为512MB + MaxAge: sl.config.MaxAge, // 文件最多保存多少天 + MaxBackups: sl.config.MaxBackups, // 保留旧文件的最大个数 + LocalTime: sl.config.LocalTime, // 采用本地时间 + Compress: sl.config.Compress, // 是否压缩日志 + } + sl.jsonHandler = slog.NewJSONHandler(&lumberjackLogger, &opts) + sl.logger = slog.New(sl.jsonHandler) + } else { + sl.jsonHandler = slog.NewJSONHandler(os.Stdout, &opts) + sl.logger = slog.New(sl.jsonHandler) + } sl.setConfig(ctx) @@ -174,4 +179,5 @@ func (sl *ApiSLog) setConfig(ctx context.Context) { sl.systemConfig.sdkVersion = go_library.Version() sl.systemConfig.goVersion = runtime.Version() + } diff --git a/utils/golog/gin.custom.config.go b/utils/golog/gin.custom.config.go index 6ced1428..16e72fbc 100644 --- a/utils/golog/gin.custom.config.go +++ b/utils/golog/gin.custom.config.go @@ -7,6 +7,15 @@ import ( "runtime" ) +// ConfigSLogClientFun 日志配置 +func (c *GinCustomClient) ConfigSLogClientFun(sLogFun SLogFun) { + sLog := sLogFun() + if sLog != nil { + c.slog.client = sLog + c.slog.status = true + } +} + func (c *GinCustomClient) setConfig(ctx context.Context) { info := getSystem() diff --git a/utils/golog/slog.go b/utils/golog/slog.go index d84add2b..e11bebff 100644 --- a/utils/golog/slog.go +++ b/utils/golog/slog.go @@ -23,30 +23,21 @@ type SLogConfig struct { Compress bool // 是否压缩日志 JsonFormat bool // 是否输出为json格式 ShowLine bool // 显示代码行 + LogSaveFile bool // 是否保存到文件 LogInConsole bool // 是否同时输出到控制台 } type SLog struct { - config *SLogConfig - lumberjackLogger lumberjack.Logger - jsonHandler *slog.JSONHandler - textHandler *slog.TextHandler - logger *slog.Logger + config *SLogConfig + jsonHandler *slog.JSONHandler + textHandler *slog.TextHandler + logger *slog.Logger } func NewSlog(ctx context.Context, config *SLogConfig) *SLog { sl := &SLog{config: config} - sl.lumberjackLogger = lumberjack.Logger{ - Filename: sl.config.LogPath + sl.config.LogName, // ⽇志⽂件路径 - MaxSize: sl.config.MaxSize, // 单位为MB,默认为512MB - MaxAge: sl.config.MaxAge, // 文件最多保存多少天 - MaxBackups: sl.config.MaxBackups, // 保留旧文件的最大个数 - LocalTime: sl.config.LocalTime, // 采用本地时间 - Compress: sl.config.Compress, // 是否压缩日志 - } - opts := slog.HandlerOptions{ AddSource: sl.config.ShowLine, Level: slog.LevelDebug, @@ -59,21 +50,43 @@ func NewSlog(ctx context.Context, config *SLogConfig) *SLog { }, } - // 判断是否json格式输出 - if sl.config.JsonFormat { - if sl.config.LogInConsole { - sl.jsonHandler = slog.NewJSONHandler(io.MultiWriter(os.Stdout, &sl.lumberjackLogger), &opts) + // 是否保存到文件 + if sl.config.LogSaveFile { + + lumberjackLogger := lumberjack.Logger{ + Filename: sl.config.LogPath + sl.config.LogName, // ⽇志⽂件路径 + MaxSize: sl.config.MaxSize, // 单位为MB,默认为512MB + MaxAge: sl.config.MaxAge, // 文件最多保存多少天 + MaxBackups: sl.config.MaxBackups, // 保留旧文件的最大个数 + LocalTime: sl.config.LocalTime, // 采用本地时间 + Compress: sl.config.Compress, // 是否压缩日志 + } + + // 是否json格式输出 + if sl.config.JsonFormat { + if sl.config.LogInConsole { + sl.jsonHandler = slog.NewJSONHandler(io.MultiWriter(os.Stdout, &lumberjackLogger), &opts) + } else { + sl.jsonHandler = slog.NewJSONHandler(&lumberjackLogger, &opts) + } + sl.logger = slog.New(sl.jsonHandler) } else { - sl.jsonHandler = slog.NewJSONHandler(&sl.lumberjackLogger, &opts) + if sl.config.LogInConsole { + sl.textHandler = slog.NewTextHandler(io.MultiWriter(os.Stdout, &lumberjackLogger), &opts) + } else { + sl.textHandler = slog.NewTextHandler(&lumberjackLogger, &opts) + } + sl.logger = slog.New(sl.textHandler) } - sl.logger = slog.New(sl.jsonHandler) } else { - if sl.config.LogInConsole { - sl.textHandler = slog.NewTextHandler(io.MultiWriter(os.Stdout, &sl.lumberjackLogger), &opts) + // 是否json格式输出 + if sl.config.JsonFormat { + sl.jsonHandler = slog.NewJSONHandler(os.Stdout, &opts) + sl.logger = slog.New(sl.jsonHandler) } else { - sl.textHandler = slog.NewTextHandler(&sl.lumberjackLogger, &opts) + sl.textHandler = slog.NewTextHandler(os.Stdout, &opts) + sl.logger = slog.New(sl.textHandler) } - sl.logger = slog.New(sl.textHandler) } return sl