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