package loggerx_test import ( "context" "os" "path/filepath" "strings" "testing" "github.com/yuninks/loggerx" ) func statFile(p string) (os.FileInfo, error) { return os.Stat(p) } // Close() 返回后压缩必须已经收尾:不应该残留「既是 .log 又有同名 .gz」的中间态 func TestCompressionFinishedAfterClose(t *testing.T) { dir := t.TempDir() l := loggerx.NewLogger(context.Background(), loggerx.SetDir(dir), loggerx.SetSizeSplit(4*1024), ) for i := 0; i < 500; i++ { l.Infof(context.Background(), "FIN-%d", i) } if err := l.Close(); err != nil { t.Fatalf("Close: %v", err) } logs, _ := filepath.Glob(filepath.Join(dir, "*.log")) gzs, _ := filepath.Glob(filepath.Join(dir, "*.log.gz")) t.Logf("Close 后: %d 个 .log, %d 个 .gz", len(logs), len(gzs)) entries, err := os.ReadDir(dir) if err != nil { t.Fatal(err) } for _, e := range entries { info, _ := e.Info() t.Logf(" %s %d 字节", e.Name(), info.Size()) } // 对每个 .gz,不应还存在同名的 .log(说明压缩成功后原文件已清理) for _, g := range gzs { base := strings.TrimSuffix(g, ".gz") if _, err := statFile(base); err == nil { t.Errorf("压缩完成后原文件仍存在: %s", filepath.Base(base)) } } // gz 加 log 的总数应该等于归档总数(每个归档恰好以一种形态存在) if len(gzs) == 0 { t.Fatal("没有产生 .gz 归档") } }