Added FieldMap to reduce potential struct bloat
diff --git a/json_formatter.go b/json_formatter.go
index 0c74e5a..1e3e2bc 100644
--- a/json_formatter.go
+++ b/json_formatter.go
@@ -4,21 +4,27 @@
 	"encoding/json"
 	"fmt"
 )
-
 type fieldKey string
+type FieldMap map[fieldKey]string
 
 const (
-	DefaultKeyMsg   = "msg"
-	DefaultKeyLevel = "level"
-	DefaultKeyTime  = "time"
+	FieldKeyMsg   = "msg"
+	FieldKeyLevel = "level"
+	FieldKeyTime  = "time"
 )
 
+func (f FieldMap) resolve(key fieldKey) string {
+	if k, ok := f[key]; ok {
+		return k
+	}
+
+	return string(key)
+}
+
 type JSONFormatter struct {
 	// TimestampFormat sets the format used for marshaling timestamps.
 	TimestampFormat string
-	MessageKey      string
-	LevelKey        string
-	TimeKey         string
+	FieldMap        FieldMap
 }
 
 func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
@@ -40,9 +46,9 @@
 		timestampFormat = DefaultTimestampFormat
 	}
 
-	data[f.resolveKey(f.TimeKey, DefaultKeyTime)] = entry.Time.Format(timestampFormat)
-	data[f.resolveKey(f.MessageKey, DefaultKeyMsg)] = entry.Message
-	data[f.resolveKey(f.LevelKey, DefaultKeyLevel)] = entry.Level.String()
+	data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat)
+	data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message
+	data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String()
 
 	serialized, err := json.Marshal(data)
 	if err != nil {
@@ -50,10 +56,3 @@
 	}
 	return append(serialized, '\n'), nil
 }
-
-func (f *JSONFormatter) resolveKey(key, defaultKey string) string {
-	if len(key) > 0 {
-		return key
-	}
-	return defaultKey
-}
diff --git a/json_formatter_test.go b/json_formatter_test.go
index 0fa3466..5baa93e 100644
--- a/json_formatter_test.go
+++ b/json_formatter_test.go
@@ -120,7 +120,11 @@
 }
 
 func TestJSONMessageKey(t *testing.T) {
-	formatter := &JSONFormatter{MessageKey: "message"}
+	formatter := &JSONFormatter{
+		FieldMap: FieldMap{
+			FieldKeyMsg: "message",
+		},
+	}
 
 	b, err := formatter.Format(&Entry{Message: "oh hai"})
 	if err != nil {
@@ -133,7 +137,11 @@
 }
 
 func TestJSONLevelKey(t *testing.T) {
-	formatter := &JSONFormatter{LevelKey: "somelevel"}
+	formatter := &JSONFormatter{
+		FieldMap: FieldMap{
+			FieldKeyLevel: "somelevel",
+		},
+	}
 
 	b, err := formatter.Format(WithField("level", "something"))
 	if err != nil {
@@ -146,7 +154,11 @@
 }
 
 func TestJSONTimeKey(t *testing.T) {
-	formatter := &JSONFormatter{TimeKey: "timeywimey"}
+	formatter := &JSONFormatter{
+		FieldMap: FieldMap{
+			FieldKeyTime: "timeywimey",
+		},
+	}
 
 	b, err := formatter.Format(WithField("level", "something"))
 	if err != nil {