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) { 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 == "" { if f.TimestampFormat == "" {
f.TimestampFormat = logrus.DefaultTimestampFormat f.TimestampFormat = logrus.DefaultTimestampFormat
} }
entry.Data["@timestamp"] = entry.Time.Format(f.TimestampFormat) fields["@timestamp"] = entry.Time.Format(f.TimestampFormat)
// set message field // set message field
v, ok := entry.Data["message"] v, ok := entry.Data["message"]
if ok { if ok {
entry.Data["fields.message"] = v fields["fields.message"] = v
} }
entry.Data["message"] = entry.Message fields["message"] = entry.Message
// set level field // set level field
v, ok = entry.Data["level"] v, ok = entry.Data["level"]
if ok { 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 // set type field
if f.Type != "" { if f.Type != "" {
v, ok = entry.Data["type"] v, ok = entry.Data["type"]
if ok { 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 { if err != nil {
return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err)
} }