192 lines
4.5 KiB
Go
192 lines
4.5 KiB
Go
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
stdlog "log"
|
|
"os"
|
|
"testing"
|
|
|
|
"fiskerinc.com/modules/testhelper"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/diode"
|
|
)
|
|
|
|
func setupTestLogOutput() diode.Writer {
|
|
wr := diode.NewWriter(os.Stdout, RING_BUFFER_SIZE, 0, func(missed int) {
|
|
Logger.Error().Msgf("logger dropped %d messages", missed)
|
|
})
|
|
logger := zerolog.New(wr)
|
|
Logger = &logger
|
|
|
|
return wr
|
|
}
|
|
|
|
func TestGetLogger(t *testing.T) {
|
|
GetLogger()
|
|
logLevel := zerolog.GlobalLevel().String()
|
|
expectedLevel := "info"
|
|
if logLevel != expectedLevel {
|
|
t.Errorf(testhelper.TestErrorTemplate, "TestLoggerInit", expectedLevel, logLevel)
|
|
}
|
|
}
|
|
|
|
func TestLoggerSetGlobalLevel(t *testing.T) {
|
|
logger := zerolog.New(io.Discard)
|
|
Logger = &logger
|
|
|
|
err := SetGlobalLevel("debug")
|
|
if err != nil {
|
|
t.Errorf(testhelper.TestErrorTemplate, "TestLoggerSetGlobalLevel", nil, err)
|
|
}
|
|
|
|
logLevel := zerolog.GlobalLevel().String()
|
|
expectedLevel := "debug"
|
|
|
|
if logLevel != expectedLevel {
|
|
t.Errorf(testhelper.TestErrorTemplate, "TestLoggerSetGlobalLevel", expectedLevel, logLevel)
|
|
}
|
|
}
|
|
|
|
func TestLoggerSetGlobalLevelUnknown(t *testing.T) {
|
|
err := SetGlobalLevel("fisker")
|
|
if err == nil {
|
|
t.Errorf(testhelper.TestErrorTemplate, "TestLoggerSetGlobalLevelUnknown", "err", err)
|
|
}
|
|
}
|
|
|
|
func ExampleDebug() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
Debug().Msg("Use this to record individual events")
|
|
// Output: {"level":"debug","message":"Use this to record individual events"}
|
|
}
|
|
|
|
func ExampleInfo() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
Info().Msg("This is the default level")
|
|
// Output: {"level":"info","message":"This is the default level"}
|
|
}
|
|
|
|
func ExampleWarn() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
Warn().Msg("Use this to notify of abnormal events/triggers")
|
|
// Output: {"level":"warn","message":"Use this to notify of abnormal events/triggers"}
|
|
}
|
|
|
|
func ExampleError() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
Error().Err(fmt.Errorf("Use this as a substitute for panic/fatal")).Send()
|
|
// Output: {"level":"error","message":"Use this as a substitute for panic/fatal"}
|
|
}
|
|
|
|
func ExampleConfidential() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
type User struct {
|
|
Name string
|
|
Password string
|
|
Phone string
|
|
}
|
|
type VehicleData struct {
|
|
Email string
|
|
VIN string
|
|
Miles int
|
|
User1 User
|
|
User2 *User
|
|
}
|
|
|
|
confObject := &VehicleData{
|
|
Email: "dtaylor@fiskerinc.com",
|
|
VIN: "5VST414",
|
|
Miles: 29500,
|
|
User1: User{
|
|
Name: "Henrik Fisker",
|
|
Password: "ocean123!",
|
|
Phone: "+45(123)456-7890",
|
|
},
|
|
User2: &User{
|
|
Name: "Drew Taylor",
|
|
Password: "Emotion123!",
|
|
Phone: "+1(123)456-7890",
|
|
},
|
|
}
|
|
Info().Confidential(confObject).Send()
|
|
// Output: {"level":"info","Email":"d******@fiskerinc.com","VIN":"5VST414","Miles":29500,"User1":{"Name":"Henrik Fisker","Password":"*********","Phone":"+4*(1**)4**-7***"},"User2":{"Name":"Drew Taylor","Password":"***********","Phone":"+1(1**)4**-7***"}}
|
|
}
|
|
|
|
func ExampleContext() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
Info().
|
|
Str("vehicle", "Ocean").
|
|
Str("vin", "ABC123").
|
|
Int("miles", 8077).
|
|
Send()
|
|
// Output: {"level":"info","vehicle":"Ocean","vin":"ABC123","miles":8077}
|
|
}
|
|
|
|
func ExampleSublog() {
|
|
wr := setupTestLogOutput()
|
|
defer wr.Close()
|
|
|
|
sublogger := Logger.With().
|
|
Str("component", "test").
|
|
Logger()
|
|
sublogger.Info().Msg("Branch sublogs off root logger")
|
|
// Output: {"level":"info","component":"test","message":"Branch sublogs off root logger"}
|
|
}
|
|
|
|
func BenchmarkZeroLogDefault(b *testing.B) {
|
|
logger := zerolog.New(io.Discard)
|
|
for i := 0; i < b.N; i++ {
|
|
logger.Info().Msg("hello fisker")
|
|
}
|
|
}
|
|
|
|
func BenchmarkZeroLogWithTime(b *testing.B) {
|
|
logger := zerolog.New(io.Discard).With().Timestamp().Logger()
|
|
for i := 0; i < b.N; i++ {
|
|
logger.Info().Msg("hello fisker")
|
|
}
|
|
}
|
|
|
|
func BenchmarkZeroLogWithCaller(b *testing.B) {
|
|
logger := zerolog.New(io.Discard).With().Caller().Logger()
|
|
for i := 0; i < b.N; i++ {
|
|
logger.Info().Msg("hello fisker")
|
|
}
|
|
}
|
|
|
|
func BenchmarkZeroLogWithCallerAndTime(b *testing.B) {
|
|
logger := zerolog.New(io.Discard).With().Timestamp().Caller().Logger()
|
|
for i := 0; i < b.N; i++ {
|
|
logger.Info().Msg("hello fisker")
|
|
}
|
|
}
|
|
|
|
func BenchmarkNativeLogDefault(b *testing.B) {
|
|
stdlog.SetOutput(io.Discard)
|
|
for i := 0; i < b.N; i++ {
|
|
stdlog.Print("hello fisker")
|
|
}
|
|
}
|
|
|
|
func BenchmarkNativeLogWithFields(b *testing.B) {
|
|
stdlog.SetOutput(io.Discard)
|
|
stdlog.SetFlags(stdlog.Ldate | stdlog.Ltime | stdlog.Lmicroseconds | stdlog.Llongfile)
|
|
for i := 0; i < b.N; i++ {
|
|
stdlog.Print("hello fisker")
|
|
}
|
|
}
|