添加自动文件压缩的实现
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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 归档")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user