-
Notifications
You must be signed in to change notification settings - Fork 4
/
watermill_adapter.go
47 lines (37 loc) · 1.39 KB
/
watermill_adapter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package logwatermill
import (
"github.com/ThreeDotsLabs/watermill"
"github.com/insolar/assured-ledger/ledger-core/log"
"github.com/insolar/assured-ledger/ledger-core/log/logfmt"
"github.com/insolar/assured-ledger/ledger-core/vanilla/throw"
)
func NewWatermillLogAdapter(log log.Logger) *WatermillLogAdapter {
return &WatermillLogAdapter{
log: log.WithField("service", "watermill"),
}
}
type WatermillLogAdapter struct {
log log.Logger
}
func (w *WatermillLogAdapter) event(fields watermill.LogFields, level log.Level, msg string) {
// don't use w.Debug() etc, value of the "file=..." field would be incorrect
if fn := w.log.Embeddable().NewEventStruct(level); fn != nil {
fn(logfmt.LogFields{Msg: msg, Fields: fields}, nil)
}
}
func (w *WatermillLogAdapter) With(fields watermill.LogFields) watermill.LoggerAdapter {
l := w.log.WithFields(fields)
return &WatermillLogAdapter{log: l}
}
func (w *WatermillLogAdapter) Error(msg string, err error, fields watermill.LogFields) {
w.log.Errorm(throw.E(msg, err), logfmt.FieldMapMarshaller(fields))
}
func (w *WatermillLogAdapter) Info(msg string, fields watermill.LogFields) {
w.event(fields, log.InfoLevel, msg)
}
func (w *WatermillLogAdapter) Debug(msg string, fields watermill.LogFields) {
w.event(fields, log.DebugLevel, msg)
}
func (w *WatermillLogAdapter) Trace(msg string, fields watermill.LogFields) {
w.event(fields, log.DebugLevel, msg)
}