package loggerx_test import ( "context" "os" "path/filepath" "strings" "sync" "testing" "github.com/yuninks/loggerx" ) // MustSync 与写入并发时是否安全(配合 -race 运行) func TestMustSyncConcurrentWithWrite(t *testing.T) { dir := t.TempDir() l := loggerx.NewLogger(context.Background(), loggerx.SetDir(dir)) defer l.Close() var wg sync.WaitGroup ctx := context.Background() // 一边写,一边调 MustSync wg.Add(2) go func() { defer wg.Done() for i := 0; i < 500; i++ { l.Infof(ctx, "concurrent-%d", i) } }() go func() { defer wg.Done() for i := 0; i < 200; i++ { _ = l.MustSync() } }() wg.Wait() } // goroutine id 开关是否真的生效(SetGID(false) 后不应再出现 gid 字段) func TestSetGIDActuallyDisablesGID(t *testing.T) { dir := t.TempDir() l := loggerx.NewLogger(context.Background(), loggerx.SetDir(dir), loggerx.SetGID(false)) l.Info(context.Background(), "no-gid") if err := l.Close(); err != nil { t.Fatalf("Close: %v", err) } var sb strings.Builder files, _ := filepath.Glob(filepath.Join(dir, "*.log")) for _, f := range files { b, err := os.ReadFile(f) if err != nil { t.Fatalf("读取 %s: %v", f, err) } sb.Write(b) } content := sb.String() if content == "" { t.Fatal("没有写入任何内容") } if strings.Contains(content, `"gid":`) { t.Errorf("SetGID(false) 未生效,日志里仍有 gid: %s", content) } }