starlog/stdlib_bridge_test.go

102 lines
2.5 KiB
Go
Raw Normal View History

2026-03-19 16:37:57 +08:00
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")
}