diff --git a/src/github.com/matrix-org/dendrite/common/log.go b/src/github.com/matrix-org/dendrite/common/log.go index bcd1e66b8..66948396c 100644 --- a/src/github.com/matrix-org/dendrite/common/log.go +++ b/src/github.com/matrix-org/dendrite/common/log.go @@ -29,7 +29,9 @@ type dendriteFormatter struct { logrus.TextFormatter } -func (f dendriteFormatter) Format(entry *logrus.Entry) ([]byte, error) { +func (f dendriteFormatter) Format(entry *logrus.Entry) (format []byte, err error) { + entry.Time = entry.Time.UTC() + if _, ok := entry.Data["prefix"]; ok { prefix, ok := entry.Data["prefix"].(string) if !ok { @@ -42,12 +44,27 @@ func (f dendriteFormatter) Format(entry *logrus.Entry) ([]byte, error) { prefix = ansi.Color(prefix, "white+b") } - entry.Message = fmt.Sprintf("%s: %s", prefix, entry.Message) - delete(entry.Data, "prefix") + entry.Message = fmt.Sprintf("%s: %s\t", prefix, entry.Message) + + // Generate the formatted log without the prefix as a field + // Use a copy of the entry so the same entry isn't altered by multiple + // fields at the same time + entryCpy := *entry + // Go doesn't perform deep copies, so the fields have to be manually + // copied + fields := make(logrus.Fields) + for k, v := range entry.Data { + if k != "prefix" { + fields[k] = v + } + } + entryCpy.Data = fields + format, err = f.TextFormatter.Format(&entryCpy) + } else { + format, err = f.TextFormatter.Format(entry) } - entry.Time = entry.Time.UTC() - return f.TextFormatter.Format(entry) + return } // SetupLogging configures the logging format and destination(s).