feat(log): 添加日志系统功能

- 集成 lumberjack.v2 库实现日志轮转功能
- 创建 log 包并实现基础日志记录器
- 实现 Info、Error、Warn、Debug 四种日志级别方法
- 配置日志文件大小限制为 1MB 和保留策略
- 实现日志同时输出到文件和终端的功能
- 添加错误日志的堆栈跟踪信息记录
main v1.0.1003
black1552 2026-02-25 14:22:56 +08:00
parent 964d311247
commit 22a6f33af2
4 changed files with 63 additions and 0 deletions

1
go.mod
View File

@ -13,6 +13,7 @@ require (
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/xuri/excelize/v2 v2.9.1 github.com/xuri/excelize/v2 v2.9.1
google.golang.org/grpc v1.76.0 google.golang.org/grpc v1.76.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gorm.io/driver/mysql v1.6.0 gorm.io/driver/mysql v1.6.0
gorm.io/gorm v1.31.1 gorm.io/gorm v1.31.1
) )

2
go.sum
View File

@ -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-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 h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= 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.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 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=

1
log/index.go Normal file
View File

@ -0,0 +1 @@
package log

59
log/log.go Normal file
View File

@ -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...))
}