github.com/shogo82148/goa-v1@v1.6.2/logging/kit/adapter.go (about) 1 /* 2 Package goakit contains an adapter that makes it possible to configure goa so it uses the go-kit 3 log package as logger backend. 4 Usage: 5 6 // Initialize logger using github.com/go-kit/log package 7 logger := log.NewLogfmtLogger(w) 8 // Initialize goa service logger using adapter 9 service.WithLogger(goakit.New(logger)) 10 // ... Proceed with configuring and starting the goa service 11 12 // In middlewares: 13 goakit.Logger(ctx).Log("foo", "bar") 14 */ 15 package goakit 16 17 import ( 18 "context" 19 20 "github.com/go-kit/log" 21 "github.com/shogo82148/goa-v1" 22 ) 23 24 // adapter is the go-kit log goa logger adapter. 25 type adapter struct { 26 log.Logger 27 } 28 29 // New wraps a go-kit logger into a goa logger. 30 func New(logger log.Logger) goa.LogAdapter { 31 return &adapter{logger} 32 } 33 34 // Logger returns the go-kit logger stored in the given context if any, nil otherwise. 35 func Logger(ctx context.Context) log.Logger { 36 logger := goa.ContextLogger(ctx) 37 if a, ok := logger.(*adapter); ok { 38 return a.Logger 39 } 40 return nil 41 } 42 43 // Info logs informational messages using go-kit. 44 func (a *adapter) Info(msg string, data ...interface{}) { 45 ctx := []interface{}{"lvl", "info", "msg", msg} 46 ctx = append(ctx, data...) 47 a.Logger.Log(ctx...) 48 } 49 50 // Info logs warning messages using go-kit. 51 func (a *adapter) Warn(msg string, data ...interface{}) { 52 ctx := []interface{}{"lvl", "warn", "msg", msg} 53 ctx = append(ctx, data...) 54 a.Logger.Log(ctx...) 55 } 56 57 // Error logs error messages using go-kit. 58 func (a *adapter) Error(msg string, data ...interface{}) { 59 ctx := []interface{}{"lvl", "error", "msg", msg} 60 ctx = append(ctx, data...) 61 a.Logger.Log(ctx...) 62 } 63 64 // New instantiates a new logger from the given context. 65 func (a *adapter) New(data ...interface{}) goa.LogAdapter { 66 return &adapter{Logger: log.With(a.Logger, data...)} 67 }