package logrus import ( "encoding/json" "fmt" "time" ) type JSONFormatter struct{} func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) { data := make(Fields, len(entry.Data)+3) for k, v := range entry.Data { // Otherwise errors are ignored by `encoding/json` // https://github.com/Sirupsen/logrus/issues/137 if err, ok := v.(error); ok { data[k] = err.Error() } else { data[k] = v } } prefixFieldClashes(data) data["time"] = entry.Time.Format(time.RFC3339) data["msg"] = entry.Message data["level"] = entry.Level.String() serialized, err := json.Marshal(data) if err != nil { return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) } return append(serialized, '\n'), nil }