73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package loggerx_test
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"github.com/yuninks/loggerx"
|
||
|
|
)
|
||
|
|
|
||
|
|
// 异步模式下 Channel + error 组合是否落盘
|
||
|
|
func TestAsyncChannelErrorWrites(t *testing.T) {
|
||
|
|
dir := t.TempDir()
|
||
|
|
l := loggerx.NewLogger(context.Background(),
|
||
|
|
loggerx.SetDir(dir),
|
||
|
|
loggerx.SetWriteAsync(),
|
||
|
|
loggerx.SetSizeSplit(6*1024),
|
||
|
|
)
|
||
|
|
for i := 0; i < 10; i++ {
|
||
|
|
l.Info(context.Background(), "main")
|
||
|
|
l.Channel("sub").Errorf(context.Background(), "ERR-%d", i)
|
||
|
|
l.Channel("sub").Infof(context.Background(), "SUBINFO-%d", i)
|
||
|
|
l.Errorf(context.Background(), "MAINERR-%d", i)
|
||
|
|
}
|
||
|
|
if err := l.Close(); err != nil {
|
||
|
|
t.Fatalf("Close: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
_ = filepath.Walk(dir, func(p string, info os.FileInfo, err error) error {
|
||
|
|
if err != nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
rel, _ := filepath.Rel(dir, p)
|
||
|
|
if info.IsDir() {
|
||
|
|
t.Logf(" [dir] %s", rel)
|
||
|
|
} else {
|
||
|
|
t.Logf(" [file] %s %d", rel, info.Size())
|
||
|
|
}
|
||
|
|
return nil
|
||
|
|
})
|
||
|
|
|
||
|
|
// sub channel 的日志必须落在 sub 子目录,不能混进根目录
|
||
|
|
all := readAllLogs(t, dir)
|
||
|
|
if n := countOf(all, "SUBINFO"); n != 0 {
|
||
|
|
t.Errorf("根目录日志里混入了 %d 条 sub channel 的 info 日志", n)
|
||
|
|
}
|
||
|
|
if _, err := os.Stat(filepath.Join(dir, "sub")); err != nil {
|
||
|
|
t.Fatalf("channel 目录不存在: %v", err)
|
||
|
|
}
|
||
|
|
sub := readAllIn(t, dir, "sub")
|
||
|
|
for i := 0; i < 10; i++ {
|
||
|
|
if !strings.Contains(sub, fmt.Sprintf("ERR-%d", i)) {
|
||
|
|
t.Errorf("sub channel 丢失 error 日志 ERR-%d", i)
|
||
|
|
}
|
||
|
|
if !strings.Contains(sub, fmt.Sprintf("SUBINFO-%d", i)) {
|
||
|
|
t.Errorf("sub channel 丢失 info 日志 SUBINFO-%d", i)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func countOf(s, sub string) int {
|
||
|
|
n := 0
|
||
|
|
for i := 0; i+len(sub) <= len(s); i++ {
|
||
|
|
if s[i:i+len(sub)] == sub {
|
||
|
|
n++
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return n
|
||
|
|
}
|