Merge pull request #314 from vend/logstash-immutable-event

avoid modifying the entry by copying all fields and values
This commit is contained in:
Antoine Grondin 2016-01-18 19:00:32 -05:00
commit f7f79f729e
1 changed files with 14 additions and 9 deletions

View File

@ -17,38 +17,43 @@ type LogstashFormatter struct {
}
func (f *LogstashFormatter) Format(entry *logrus.Entry) ([]byte, error) {
entry.Data["@version"] = 1
fields := make(logrus.Fields)
for k, v := range entry.Data {
fields[k] = v
}
fields["@version"] = 1
if f.TimestampFormat == "" {
f.TimestampFormat = logrus.DefaultTimestampFormat
}
entry.Data["@timestamp"] = entry.Time.Format(f.TimestampFormat)
fields["@timestamp"] = entry.Time.Format(f.TimestampFormat)
// set message field
v, ok := entry.Data["message"]
if ok {
entry.Data["fields.message"] = v
fields["fields.message"] = v
}
entry.Data["message"] = entry.Message
fields["message"] = entry.Message
// set level field
v, ok = entry.Data["level"]
if ok {
entry.Data["fields.level"] = v
fields["fields.level"] = v
}
entry.Data["level"] = entry.Level.String()
fields["level"] = entry.Level.String()
// set type field
if f.Type != "" {
v, ok = entry.Data["type"]
if ok {
entry.Data["fields.type"] = v
fields["fields.type"] = v
}
entry.Data["type"] = f.Type
fields["type"] = f.Type
}
serialized, err := json.Marshal(entry.Data)
serialized, err := json.Marshal(fields)
if err != nil {
return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
}