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  }