recorders/logrus.go (40 lines of code) (raw):
/*
Copyright (c) Facebook, Inc. and its affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
*/
package recorders
import (
"github.com/pinterest/bender"
"github.com/sirupsen/logrus"
)
// NewLogrusRecorder creates a new logrus.Logger-based recorder.
func NewLogrusRecorder(l *logrus.Logger, defaults ...logrus.Fields) bender.Recorder {
return func(msg interface{}) {
log := logrus.NewEntry(l)
for _, fields := range defaults {
for key, value := range fields {
log = log.WithField(key, value)
}
}
switch msg := msg.(type) {
case *bender.StartRequestEvent:
logStartRequestEvent(log, msg)
case *bender.EndRequestEvent:
logEndRequestEvent(log, msg)
}
}
}
func logStartRequestEvent(log *logrus.Entry, msg *bender.StartRequestEvent) {
log.WithFields(logrus.Fields{
"start": msg.Time,
"request": msg.Request,
}).Debug("Start")
}
func logEndRequestEvent(log *logrus.Entry, msg *bender.EndRequestEvent) {
log = log.WithFields(logrus.Fields{
"start": msg.Start,
"end": msg.End,
"elapsed": int(msg.End - msg.Start),
"response": msg.Response,
})
if msg.Err != nil {
log.WithError(msg.Err).Warn("Fail")
} else {
log.Info("Success")
}
}