Added customizable keys to JSON formatter
diff --git a/json_formatter.go b/json_formatter.go
index 2ad6dc5..7364fe8 100644
--- a/json_formatter.go
+++ b/json_formatter.go
@@ -8,6 +8,9 @@
type JSONFormatter struct {
// TimestampFormat sets the format used for marshaling timestamps.
TimestampFormat string
+ MessageKey string
+ LevelKey string
+ TimeKey string
}
func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
@@ -29,9 +32,24 @@
timestampFormat = DefaultTimestampFormat
}
- data["time"] = entry.Time.Format(timestampFormat)
- data["msg"] = entry.Message
- data["level"] = entry.Level.String()
+ timeKey := f.TimeKey
+ if timeKey == "" {
+ timeKey = "time"
+ }
+
+ messageKey := f.MessageKey
+ if messageKey == "" {
+ messageKey = "msg"
+ }
+
+ levelKey := f.LevelKey
+ if levelKey == "" {
+ levelKey = "level"
+ }
+
+ data[timeKey] = entry.Time.Format(timestampFormat)
+ data[messageKey] = entry.Message
+ data[levelKey] = entry.Level.String()
serialized, err := json.Marshal(data)
if err != nil {
diff --git a/json_formatter_test.go b/json_formatter_test.go
index 1d70873..0fa3466 100644
--- a/json_formatter_test.go
+++ b/json_formatter_test.go
@@ -3,7 +3,7 @@
import (
"encoding/json"
"errors"
-
+ "strings"
"testing"
)
@@ -118,3 +118,42 @@
t.Fatal("Expected JSON log entry to end with a newline")
}
}
+
+func TestJSONMessageKey(t *testing.T) {
+ formatter := &JSONFormatter{MessageKey: "message"}
+
+ b, err := formatter.Format(&Entry{Message: "oh hai"})
+ if err != nil {
+ t.Fatal("Unable to format entry: ", err)
+ }
+ s := string(b)
+ if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) {
+ t.Fatal("Expected JSON to format message key")
+ }
+}
+
+func TestJSONLevelKey(t *testing.T) {
+ formatter := &JSONFormatter{LevelKey: "somelevel"}
+
+ b, err := formatter.Format(WithField("level", "something"))
+ if err != nil {
+ t.Fatal("Unable to format entry: ", err)
+ }
+ s := string(b)
+ if !strings.Contains(s, "somelevel") {
+ t.Fatal("Expected JSON to format level key")
+ }
+}
+
+func TestJSONTimeKey(t *testing.T) {
+ formatter := &JSONFormatter{TimeKey: "timeywimey"}
+
+ b, err := formatter.Format(WithField("level", "something"))
+ if err != nil {
+ t.Fatal("Unable to format entry: ", err)
+ }
+ s := string(b)
+ if !strings.Contains(s, "timeywimey") {
+ t.Fatal("Expected JSON to format time key")
+ }
+}