package starlog import ( "bytes" "log" "strings" "testing" ) func TestAsWriterBridge(t *testing.T) { var buf bytes.Buffer logger := newStructuredTestLogger(&buf) writer := logger.AsWriter(LvInfo) n, err := writer.Write([]byte("bridge writer\n")) if err != nil { t.Fatalf("writer bridge returned error: %v", err) } if n != len("bridge writer\n") { t.Fatalf("writer bridge returned wrong length: %d", n) } got := buf.String() if !strings.Contains(got, "bridge writer") { t.Fatalf("bridge writer output missing message, got %q", got) } } func TestAsStdlibLoggerBridge(t *testing.T) { var buf bytes.Buffer logger := newStructuredTestLogger(&buf) std := logger.AsStdlibLogger(LvError) std.Print("stdlib logger line") got := buf.String() if !strings.Contains(got, "stdlib logger line") { t.Fatalf("stdlib logger bridge output missing message, got %q", got) } } func TestAsStdlibLoggerWithOptionsPrefixAndFlags(t *testing.T) { var buf bytes.Buffer logger := newStructuredTestLogger(&buf) logger.SetShowLevel(false) logger.SetShowFlag(false) logger.SetShowOriginFile(false) logger.SetShowFuncName(false) std := logger.AsStdlibLoggerWithOptions(LvInfo, WithStdlibPrefix("SDK "), WithStdlibFlags(log.Lmsgprefix), ) std.Print("line") got := buf.String() if !strings.Contains(got, "SDK line") { t.Fatalf("stdlib logger with prefix/flags should include configured prefix, got %q", got) } } func TestAsWriterWithOptionsLevelMapper(t *testing.T) { var buf bytes.Buffer logger := newStructuredTestLogger(&buf) logger.SetShowLevel(true) logger.SetShowFlag(false) logger.SetShowOriginFile(false) logger.SetShowFuncName(false) writer := logger.AsWriterWithOptions(LvInfo, WithStdlibLevelMapper(func(text string, fallbackLevel int) int { if strings.Contains(text, "[ERR]") { return LvError } return fallbackLevel }), ) _, err := writer.Write([]byte("[ERR] dynamic level")) if err != nil { t.Fatalf("AsWriterWithOptions returned error: %v", err) } got := buf.String() if !strings.Contains(got, "[ERROR]") { t.Fatalf("level mapper should map to error level, got %q", got) } if !strings.Contains(got, "[ERR] dynamic level") { t.Fatalf("expected original message in log, got %q", got) } } func TestNewStdlibLoggerWithOptionsNilLogger(t *testing.T) { std := NewStdlibLoggerWithOptions(nil, LvInfo, WithStdlibPrefix("NIL "), WithStdlibFlags(log.LstdFlags), ) if std == nil { t.Fatalf("expected non-nil std logger for nil starlog") } std.Print("discard") }