diff --git a/log/model_valuer.go b/log/model_valuer.go index 81a57b1a..be124832 100644 --- a/log/model_valuer.go +++ b/log/model_valuer.go @@ -3,6 +3,7 @@ package log import ( "encoding/base64" "fmt" + "reflect" "strings" "time" ) @@ -93,6 +94,10 @@ func ByteBase64(b []byte) Valuer { } func Stringer(s fmt.Stringer) Valuer { + if v := reflect.ValueOf(s); v.Kind() == reflect.Pointer && v.IsNil() { + return &any{nil} + } + return &any{s.String()} } diff --git a/log/model_valuer_test.go b/log/model_valuer_test.go index 33741d85..20ab6d37 100644 --- a/log/model_valuer_test.go +++ b/log/model_valuer_test.go @@ -52,4 +52,14 @@ func TestValuer_Stringer(t *testing.T) { }).Log("log with .String() key/value pair") require.Contains(t, out.String(), `mode=PRODUCTION`) + + out, logger = log.NewBufferLogger() + + var n *Mode + + logger.With(log.Fields{ + "mode": log.Stringer(n), + }).Log("log with nil .String() key/value pair") + + require.Contains(t, out.String(), `mode=null`) }