...
1
2
3 package logrus
4
5 import (
6 "errors"
7 "fmt"
8
9 "github.com/go-kit/log"
10 "github.com/sirupsen/logrus"
11 )
12
13 type Logger struct {
14 field logrus.FieldLogger
15 level logrus.Level
16 }
17
18 type Option func(*Logger)
19
20 var errMissingValue = errors.New("(MISSING)")
21
22
23 func NewLogger(logger logrus.FieldLogger, options ...Option) log.Logger {
24 l := &Logger{
25 field: logger,
26 level: logrus.InfoLevel,
27 }
28
29 for _, optFunc := range options {
30 optFunc(l)
31 }
32
33 return l
34 }
35
36
37 func WithLevel(level logrus.Level) Option {
38 return func(c *Logger) {
39 c.level = level
40 }
41 }
42
43 func (l Logger) Log(keyvals ...interface{}) error {
44 fields := logrus.Fields{}
45 for i := 0; i < len(keyvals); i += 2 {
46 if i+1 < len(keyvals) {
47 fields[fmt.Sprint(keyvals[i])] = keyvals[i+1]
48 } else {
49 fields[fmt.Sprint(keyvals[i])] = errMissingValue
50 }
51 }
52
53 switch l.level {
54 case logrus.InfoLevel:
55 l.field.WithFields(fields).Info()
56 case logrus.ErrorLevel:
57 l.field.WithFields(fields).Error()
58 case logrus.DebugLevel:
59 l.field.WithFields(fields).Debug()
60 case logrus.WarnLevel:
61 l.field.WithFields(fields).Warn()
62 case logrus.TraceLevel:
63 l.field.WithFields(fields).Trace()
64 default:
65 l.field.WithFields(fields).Print()
66 }
67
68 return nil
69 }
70
View as plain text