...

Source file src/github.com/grpc-ecosystem/go-grpc-middleware/logging/kit/ctxkit/context.go

Documentation: github.com/grpc-ecosystem/go-grpc-middleware/logging/kit/ctxkit

     1  package ctxkit
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/go-kit/log"
     7  	grpc_ctxtags "github.com/grpc-ecosystem/go-grpc-middleware/tags"
     8  )
     9  
    10  type ctxMarker struct{}
    11  
    12  type ctxLogger struct {
    13  	logger log.Logger
    14  	fields []interface{}
    15  }
    16  
    17  var (
    18  	ctxMarkerKey = &ctxMarker{}
    19  )
    20  
    21  // AddFields adds fields to the logger.
    22  func AddFields(ctx context.Context, fields ...interface{}) {
    23  	l, ok := ctx.Value(ctxMarkerKey).(*ctxLogger)
    24  	if !ok || l == nil {
    25  		return
    26  	}
    27  	l.fields = append(l.fields, fields...)
    28  }
    29  
    30  // Extract takes the call-scoped Logger from grpc_kit middleware.
    31  //
    32  // It always returns a Logger that has all the grpc_ctxtags updated.
    33  func Extract(ctx context.Context) log.Logger {
    34  	l, ok := ctx.Value(ctxMarkerKey).(*ctxLogger)
    35  	if !ok || l == nil {
    36  		return log.NewNopLogger()
    37  	}
    38  	// Add grpc_ctxtags tags metadata until now.
    39  	fields := TagsToFields(ctx)
    40  	return log.With(l.logger, append(fields, l.fields...)...)
    41  }
    42  
    43  // TagsToFields transforms the Tags on the supplied context into kit fields.
    44  func TagsToFields(ctx context.Context) []interface{} {
    45  	var fields []interface{}
    46  	tags := grpc_ctxtags.Extract(ctx)
    47  	for k, v := range tags.Values() {
    48  		fields = append(fields, k, v)
    49  	}
    50  	return fields
    51  }
    52  
    53  // ToContext adds the kit.Logger to the context for extraction later.
    54  // Returning the new context that has been created.
    55  func ToContext(ctx context.Context, logger log.Logger) context.Context {
    56  	l := &ctxLogger{
    57  		logger: logger,
    58  	}
    59  	return context.WithValue(ctx, ctxMarkerKey, l)
    60  }
    61  

View as plain text