Files

54 lines
1.4 KiB
Go
Raw Permalink Normal View History

2026-09-13 21:53:37 +08:00
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 归档")
}
}