func TestJSONLoggerMissingValue(t *testing.T) { t.Parallel() buf := &bytes.Buffer{} logger := log.NewJSONLogger(buf) if err := logger.Log("k"); err != nil { t.Fatal(err) } if want, have := `{"k":"(MISSING)"}`+"\n", buf.String(); want != have { t.Errorf("\nwant %#v\nhave %#v", want, have) } }
func TestJSONLogger(t *testing.T) { t.Parallel() buf := &bytes.Buffer{} logger := log.NewJSONLogger(buf) if err := logger.Log("err", errors.New("err"), "m", map[string]int{"0": 0}, "a", []int{1, 2, 3}); err != nil { t.Fatal(err) } if want, have := `{"a":[1,2,3],"err":"err","m":{"0":0}}`+"\n", buf.String(); want != have { t.Errorf("\nwant %#v\nhave %#v", want, have) } }
func TestJSONLoggerNilErrorValue(t *testing.T) { t.Parallel() buf := &bytes.Buffer{} logger := log.NewJSONLogger(buf) if err := logger.Log("err", (*stringError)(nil)); err != nil { t.Fatal(err) } if want, have := `{"err":null}`+"\n", buf.String(); want != have { t.Errorf("\nwant %#v\nhave %#v", want, have) } }
func TestJSONLoggerNilStringerKey(t *testing.T) { t.Parallel() buf := &bytes.Buffer{} logger := log.NewJSONLogger(buf) if err := logger.Log((*stringer)(nil), "v"); err != nil { t.Fatal(err) } if want, have := `{"NULL":"v"}`+"\n", buf.String(); want != have { t.Errorf("\nwant %#v\nhave %#v", want, have) } }
func TestModifiedLevels(t *testing.T) { buf := bytes.Buffer{} logger := levels.New( log.NewJSONLogger(&buf), levels.Key("l"), levels.DebugValue("dbg"), levels.InfoValue("nfo"), levels.WarnValue("wrn"), levels.ErrorValue("err"), levels.CritValue("crt"), ) logger.With("easter_island", "176°").Debug("msg", "moai") if want, have := `{"easter_island":"176°","l":"dbg","msg":"moai"}`+"\n", buf.String(); want != have { t.Errorf("want %#v, have %#v", want, have) } }
func TestSwapLogger(t *testing.T) { var logger log.SwapLogger // Zero value does not panic or error. err := logger.Log("k", "v") if got, want := err, error(nil); got != want { t.Errorf("got %v, want %v", got, want) } buf := &bytes.Buffer{} json := log.NewJSONLogger(buf) logger.Swap(json) if err := logger.Log("k", "v"); err != nil { t.Error(err) } if got, want := buf.String(), `{"k":"v"}`+"\n"; got != want { t.Errorf("got %v, want %v", got, want) } buf.Reset() prefix := log.NewLogfmtLogger(buf) logger.Swap(prefix) if err := logger.Log("k", "v"); err != nil { t.Error(err) } if got, want := buf.String(), "k=v\n"; got != want { t.Errorf("got %v, want %v", got, want) } buf.Reset() logger.Swap(nil) if err := logger.Log("k", "v"); err != nil { t.Error(err) } if got, want := buf.String(), ""; got != want { t.Errorf("got %v, want %v", got, want) } }
func TestJSONLoggerConcurrency(t *testing.T) { testConcurrency(t, log.NewJSONLogger(ioutil.Discard)) }
func BenchmarkJSONLoggerContextual(b *testing.B) { benchmarkRunner(b, log.NewJSONLogger(ioutil.Discard), withMessage) }
func BenchmarkJSONLoggerSimple(b *testing.B) { benchmarkRunner(b, log.NewJSONLogger(ioutil.Discard), baseMessage) }