添加自动文件压缩的实现
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package loggerx
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// 自愈:能删掉「.gz + .log 成对」里冗余的 .log
|
||||
func TestHealRemovesRedundantLog(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
src := filepath.Join(dir, "2026-09-13_info_1.log")
|
||||
if err := os.WriteFile(src, []byte("hello log\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := gzipFile(src, 1); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// 人为造出「压缩成功但源文件还在」的现场
|
||||
if err := os.WriteFile(src, []byte("hello log\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
l := &Logger{option: defaultOptions()}
|
||||
l.option.dir = dir
|
||||
l.option.compress = true
|
||||
|
||||
if err := l.healCompressedLeftovers(); err != nil {
|
||||
t.Fatalf("自愈出错: %v", err)
|
||||
}
|
||||
if _, err := os.Stat(src); !os.IsNotExist(err) {
|
||||
t.Errorf("冗余的 .log 没被清掉: %v", err)
|
||||
}
|
||||
if _, err := os.Stat(src + ".gz"); err != nil {
|
||||
t.Errorf(".gz 被误删了: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 安全性:.gz 损坏时必须保留 .log(那是唯一可读副本)
|
||||
func TestHealKeepsLogWhenGzCorrupt(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
src := filepath.Join(dir, "2026-09-13_info_2.log")
|
||||
if err := os.WriteFile(src, []byte("important data\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// 造一个损坏的 .gz(截断的非 gzip 内容)
|
||||
if err := os.WriteFile(src+".gz", []byte("not a gzip stream"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
l := &Logger{option: defaultOptions()}
|
||||
l.option.dir = dir
|
||||
l.option.compress = true
|
||||
|
||||
if err := l.healCompressedLeftovers(); err != nil {
|
||||
t.Fatalf("自愈出错: %v", err)
|
||||
}
|
||||
if _, err := os.Stat(src); err != nil {
|
||||
t.Errorf("损坏压缩包时不该删掉 .log: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭压缩时不做自愈(用户有意保留未压缩归档)
|
||||
func TestHealSkippedWhenCompressOff(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
src := filepath.Join(dir, "2026-09-13_info_3.log")
|
||||
if err := os.WriteFile(src, []byte("data\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(src+".gz", []byte("x"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
l := &Logger{option: defaultOptions()}
|
||||
l.option.dir = dir
|
||||
l.option.compress = false
|
||||
|
||||
if err := l.healCompressedLeftovers(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := os.Stat(src); err != nil {
|
||||
t.Errorf("关闭压缩时不该清理 .log: %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user