102 lines
2.5 KiB
Go
102 lines
2.5 KiB
Go
|
|
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")
|
||
|
|
}
|