From 22a6f33af28222d7eb1dec631f2857433c752cbe Mon Sep 17 00:00:00 2001 From: black1552 Date: Wed, 25 Feb 2026 14:22:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(log):=20=E6=B7=BB=E5=8A=A0=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=B3=BB=E7=BB=9F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 集成 lumberjack.v2 库实现日志轮转功能 - 创建 log 包并实现基础日志记录器 - 实现 Info、Error、Warn、Debug 四种日志级别方法 - 配置日志文件大小限制为 1MB 和保留策略 - 实现日志同时输出到文件和终端的功能 - 添加错误日志的堆栈跟踪信息记录 --- go.mod | 1 + go.sum | 2 ++ log/index.go | 1 + log/log.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 log/index.go create mode 100644 log/log.go diff --git a/go.mod b/go.mod index 3f84f74..b536415 100644 --- a/go.mod +++ b/go.mod @@ -13,6 +13,7 @@ require ( github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/xuri/excelize/v2 v2.9.1 google.golang.org/grpc v1.76.0 + gopkg.in/natefinch/lumberjack.v2 v2.2.1 gorm.io/driver/mysql v1.6.0 gorm.io/gorm v1.31.1 ) diff --git a/go.sum b/go.sum index ff436d5..62cf618 100644 --- a/go.sum +++ b/go.sum @@ -204,6 +204,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/log/index.go b/log/index.go new file mode 100644 index 0000000..7330d54 --- /dev/null +++ b/log/index.go @@ -0,0 +1 @@ +package log diff --git a/log/log.go b/log/log.go new file mode 100644 index 0000000..d937ac7 --- /dev/null +++ b/log/log.go @@ -0,0 +1,59 @@ +package log + +import ( + "fmt" + "io" + "log" + "os" + "runtime/debug" + "strings" + + "github.com/gogf/gf/v2/os/gfile" + "github.com/gogf/gf/v2/os/gtime" + "gopkg.in/natefinch/lumberjack.v2" +) + +var ( + logPath string + sysLog *log.Logger +) + +func init() { + logPath = gfile.Join(gfile.Pwd(), "logs") + filePath := gfile.Join(logPath, fmt.Sprintf("log-%s.log", gtime.Date())) + fileLogger := &lumberjack.Logger{ + Filename: filePath, + MaxSize: 1, // 单个文件最大 10MB + MaxBackups: 5, // 最多保留 5 个备份 + MaxAge: 30, // 保留 30 天 + Compress: false, // 启用压缩 + } + // 创建 MultiWriter 实现同时输出到文件和终端 + multiWriter := io.MultiWriter(fileLogger, os.Stdout) + sysLog = log.New(multiWriter, "", log.LstdFlags) +} + +// Info 打印普通信息日志 +func Info(v ...any) { + sysLog.SetPrefix("[INFO] ") + sysLog.Println(fmt.Sprint(v...)) +} + +// Error 打印错误日志 +func Error(v ...any) { + sysLog.SetPrefix("[ERROR] ") + msg := fmt.Sprint(v...) + sysLog.Println(msg, strings.TrimSpace(string(debug.Stack()))) +} + +// Warn 打印警告日志 +func Warn(v ...any) { + sysLog.SetPrefix("[WARN] ") + sysLog.Println(fmt.Sprint(v...)) +} + +// Debug 打印调试日志 +func Debug(v ...any) { + sysLog.SetPrefix("[DEBUG] ") + sysLog.Println(fmt.Sprint(v...)) +}