8 type JSONFormatter struct {
9 // TimestampFormat sets the format used for marshaling timestamps.
10 TimestampFormat string
13 func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) {
14 data := make(Fields, len(entry.Data)+3)
15 for k, v := range entry.Data {
16 switch v := v.(type) {
18 // Otherwise errors are ignored by `encoding/json`
19 // https://github.com/Sirupsen/logrus/issues/137
25 prefixFieldClashes(data)
27 timestampFormat := f.TimestampFormat
28 if timestampFormat == "" {
29 timestampFormat = DefaultTimestampFormat
32 data["time"] = entry.Time.Format(timestampFormat)
33 data["msg"] = entry.Message
34 data["level"] = entry.Level.String()
36 serialized, err := json.Marshal(data)
38 return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
40 return append(serialized, '\n'), nil