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  }