54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
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 归档")
|
|
}
|
|
}
|