Files
yml2213 5f547546c3 日志按天分割并自动清理:app-YYYYMMDD.log,保留天数可配
- dailyFileWriter 按天轮转:跨天自动切换到新文件(app-20260804.log)
- LOG_RETAIN_DAYS 控制保留天数(默认 30),到期自动删除
- docker-compose 透传 LOG_RETAIN_DAYS,README 更新环境变量说明
- 补充轮转/清理单测
2026-08-04 09:42:20 +08:00

48 lines
1.2 KiB
Go

package applog
import (
"os"
"path/filepath"
"testing"
"time"
)
func TestDailyFileWriterRotatesAndCleans(t *testing.T) {
dir := t.TempDir()
logFile := filepath.Join(dir, "app.log")
w, err := newDailyFileWriter(logFile)
if err != nil {
t.Fatalf("new writer: %v", err)
}
defer w.Close()
// 写入当天日志,文件应按 app-YYYYMMDD.log 命名
today := time.Now().Format("20060102")
if _, err := w.Write([]byte("line1\n")); err != nil {
t.Fatalf("write: %v", err)
}
todayPath := filepath.Join(dir, "app-"+today+".log")
if _, err := os.Stat(todayPath); err != nil {
t.Fatalf("today log file missing: %v", err)
}
// 旧格式 app.log 不应被创建
if _, err := os.Stat(logFile); err == nil {
t.Fatalf("old-style app.log should not be created")
}
// 构造过期文件,cleanup 应删除(保留 30 天,这里用 3 天验证)
old := filepath.Join(dir, "app-20260701.log")
if err := os.WriteFile(old, []byte("old"), 0o644); err != nil {
t.Fatalf("create old file: %v", err)
}
w.cleanup(time.Now())
if _, err := os.Stat(old); err == nil {
t.Fatalf("old log file should be cleaned")
}
// 当天的文件应保留
if _, err := os.Stat(todayPath); err != nil {
t.Fatalf("today log file should be kept")
}
}