/
mustlog.go
46 lines (37 loc) · 1.16 KB
/
mustlog.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
package mustlog
import "github.com/go-kit/kit/log"
// MustLogger extends log.Logger with Must, an error-less version of Log.
type MustLogger struct {
log.Logger
onErr func(error, ...interface{})
}
func NewMustLogger(logger log.Logger, onErr func(error, ...interface{})) *MustLogger {
return &MustLogger{
Logger: logger,
onErr: onErr,
}
}
func (m *MustLogger) Must(keyvals ...interface{}) {
if err := m.Logger.Log(keyvals...); err != nil {
m.onErr(err)
}
}
// MustContext extends log.Context to implement MustLogger.
type MustContext struct {
*log.Context
onErr func(error, ...interface{})
}
func NewMustContext(l log.Logger, onErr func(error, ...interface{})) *MustContext {
return &MustContext{Context: log.NewContext(l), onErr: onErr}
}
func (c *MustContext) Must(keyvals ...interface{}) {
if err := c.Context.Log(keyvals...); err != nil {
c.onErr(err)
}
}
func (c *MustContext) With(keyvals ...interface{}) *MustContext {
return &MustContext{Context: c.Context.With(keyvals...), onErr: c.onErr}
}
func (c *MustContext) WithPrefix(keyvals ...interface{}) *MustContext {
return &MustContext{Context: c.Context.WithPrefix(keyvals...), onErr: c.onErr}
}