github.com/brycereitano/goa@v0.0.0-20170315073847-8ffa6c85e265/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/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 "github.com/go-kit/kit/log" 19 "github.com/goadesign/goa" 20 "golang.org/x/net/context" 21 ) 22 23 // adapter is the go-kit log goa logger adapter. 24 type adapter struct { 25 log.Logger 26 } 27 28 // New wraps a go-kit logger into a goa logger. 29 func New(logger log.Logger) goa.LogAdapter { 30 return &adapter{logger} 31 } 32 33 // Logger returns the go-kit logger stored in the given context if any, nil otherwise. 34 func Logger(ctx context.Context) log.Logger { 35 logger := goa.ContextLogger(ctx) 36 if a, ok := logger.(*adapter); ok { 37 return a.Logger 38 } 39 return nil 40 } 41 42 // Info logs informational messages using go-kit. 43 func (a *adapter) Info(msg string, data ...interface{}) { 44 ctx := []interface{}{"lvl", "info", "msg", msg} 45 ctx = append(ctx, data...) 46 a.Logger.Log(ctx...) 47 } 48 49 // Error logs error messages using go-kit. 50 func (a *adapter) Error(msg string, data ...interface{}) { 51 ctx := []interface{}{"lvl", "error", "msg", msg} 52 ctx = append(ctx, data...) 53 a.Logger.Log(ctx...) 54 } 55 56 // New instantiates a new logger from the given context. 57 func (a *adapter) New(data ...interface{}) goa.LogAdapter { 58 return &adapter{Logger: log.With(a.Logger, data...)} 59 }