feat(log): 添加日志文件自动清理功能

- 实现 cleanOldLogs 函数用于删除指定天数之前的日志文件
- 添加日志文件名格式匹配逻辑,只处理 log-YYYY-MM-DD.log 格式的文件
- 在日志文件切换时自动清理 30 天前的过期日志文件
- 在系统启动时执行一次日志清理操作
- 添加日志输出显示已删除的过期日志文件信息
main v1.0.1018
maguodong 2026-03-28 09:44:58 +08:00
parent 4a3339fcfb
commit abf5529019
1 changed files with 25 additions and 5 deletions

View File

@ -63,7 +63,7 @@ func (w *logWriter) Write(p []byte) (n int, err error) {
return len(p), nil return len(p), nil
} }
// cleanOldLogs 删除指定天数之前的日志文件 // cleanOldLogs 删除指定天数之前的日志文件(包括主文件和备份文件)
func cleanOldLogs(days int) { func cleanOldLogs(days int) {
if !gfile.Exists(logPath) { if !gfile.Exists(logPath) {
return return
@ -81,13 +81,33 @@ func cleanOldLogs(days int) {
if gfile.IsDir(path) { if gfile.IsDir(path) {
continue continue
} }
// 匹配日志文件名格式log-YYYY-MM-DD.log
if !strings.HasPrefix(file, "log-") || !strings.HasSuffix(file, ".log") { var dateStr string
var matched bool
// 匹配主日志文件格式log-YYYY-MM-DD.log
if strings.HasPrefix(file, "log-") && strings.HasSuffix(file, ".log") {
// 检查是否是主文件(没有备份时间戳)
// 主文件格式log-2026-04-25.log
// 备份文件格式log-2026-04-25-2026-04-25T10-30-45.123.log
parts := strings.Split(strings.TrimSuffix(file, ".log"), "-")
if len(parts) == 4 {
// 主文件log-YYYY-MM-DD
dateStr = parts[1] + "-" + parts[2] + "-" + parts[3]
matched = true
} else if len(parts) > 4 {
// 备份文件log-YYYY-MM-DD-YYYY-MM-DDTHH-MM-SS.mmm
// 提取主日期部分(第一个日期)
dateStr = parts[1] + "-" + parts[2] + "-" + parts[3]
matched = true
}
}
if !matched {
continue continue
} }
// 提取日期部分 // 解析日期
dateStr := strings.TrimSuffix(strings.TrimPrefix(file, "log-"), ".log")
fileTime, err := time.Parse("2006-01-02", dateStr) fileTime, err := time.Parse("2006-01-02", dateStr)
if err != nil { if err != nil {
continue // 日期格式不正确,跳过 continue // 日期格式不正确,跳过