10 func TestErrorNotLost(t *testing.T) {
11 formatter := &JSONFormatter{}
13 b, err := formatter.Format(WithField("error", errors.New("wild walrus")))
15 t.Fatal("Unable to format entry: ", err)
18 entry := make(map[string]interface{})
19 err = json.Unmarshal(b, &entry)
21 t.Fatal("Unable to unmarshal formatted entry: ", err)
24 if entry["error"] != "wild walrus" {
25 t.Fatal("Error field not set")
29 func TestErrorNotLostOnFieldNotNamedError(t *testing.T) {
30 formatter := &JSONFormatter{}
32 b, err := formatter.Format(WithField("omg", errors.New("wild walrus")))
34 t.Fatal("Unable to format entry: ", err)
37 entry := make(map[string]interface{})
38 err = json.Unmarshal(b, &entry)
40 t.Fatal("Unable to unmarshal formatted entry: ", err)
43 if entry["omg"] != "wild walrus" {
44 t.Fatal("Error field not set")
48 func TestFieldClashWithTime(t *testing.T) {
49 formatter := &JSONFormatter{}
51 b, err := formatter.Format(WithField("time", "right now!"))
53 t.Fatal("Unable to format entry: ", err)
56 entry := make(map[string]interface{})
57 err = json.Unmarshal(b, &entry)
59 t.Fatal("Unable to unmarshal formatted entry: ", err)
62 if entry["fields.time"] != "right now!" {
63 t.Fatal("fields.time not set to original time field")
66 if entry["time"] != "0001-01-01T00:00:00Z" {
67 t.Fatal("time field not set to current time, was: ", entry["time"])
71 func TestFieldClashWithMsg(t *testing.T) {
72 formatter := &JSONFormatter{}
74 b, err := formatter.Format(WithField("msg", "something"))
76 t.Fatal("Unable to format entry: ", err)
79 entry := make(map[string]interface{})
80 err = json.Unmarshal(b, &entry)
82 t.Fatal("Unable to unmarshal formatted entry: ", err)
85 if entry["fields.msg"] != "something" {
86 t.Fatal("fields.msg not set to original msg field")
90 func TestFieldClashWithLevel(t *testing.T) {
91 formatter := &JSONFormatter{}
93 b, err := formatter.Format(WithField("level", "something"))
95 t.Fatal("Unable to format entry: ", err)
98 entry := make(map[string]interface{})
99 err = json.Unmarshal(b, &entry)
101 t.Fatal("Unable to unmarshal formatted entry: ", err)
104 if entry["fields.level"] != "something" {
105 t.Fatal("fields.level not set to original level field")
109 func TestJSONEntryEndsWithNewline(t *testing.T) {
110 formatter := &JSONFormatter{}
112 b, err := formatter.Format(WithField("level", "something"))
114 t.Fatal("Unable to format entry: ", err)
117 if b[len(b)-1] != '\n' {
118 t.Fatal("Expected JSON log entry to end with a newline")
122 func TestJSONMessageKey(t *testing.T) {
123 formatter := &JSONFormatter{
125 FieldKeyMsg: "message",
129 b, err := formatter.Format(&Entry{Message: "oh hai"})
131 t.Fatal("Unable to format entry: ", err)
134 if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) {
135 t.Fatal("Expected JSON to format message key")
139 func TestJSONLevelKey(t *testing.T) {
140 formatter := &JSONFormatter{
142 FieldKeyLevel: "somelevel",
146 b, err := formatter.Format(WithField("level", "something"))
148 t.Fatal("Unable to format entry: ", err)
151 if !strings.Contains(s, "somelevel") {
152 t.Fatal("Expected JSON to format level key")
156 func TestJSONTimeKey(t *testing.T) {
157 formatter := &JSONFormatter{
159 FieldKeyTime: "timeywimey",
163 b, err := formatter.Format(WithField("level", "something"))
165 t.Fatal("Unable to format entry: ", err)
168 if !strings.Contains(s, "timeywimey") {
169 t.Fatal("Expected JSON to format time key")
173 func TestJSONDisableTimestamp(t *testing.T) {
174 formatter := &JSONFormatter{
175 DisableTimestamp: true,
178 b, err := formatter.Format(WithField("level", "something"))
180 t.Fatal("Unable to format entry: ", err)
183 if strings.Contains(s, FieldKeyTime) {
184 t.Error("Did not prevent timestamp", s)
188 func TestJSONEnableTimestamp(t *testing.T) {
189 formatter := &JSONFormatter{}
191 b, err := formatter.Format(WithField("level", "something"))
193 t.Fatal("Unable to format entry: ", err)
196 if !strings.Contains(s, FieldKeyTime) {
197 t.Error("Timestamp not present", s)