src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

logging.go (1515B)


      1 package middleware
      2 
      3 import (
      4 	"context"
      5 
      6 	"github.com/aws/smithy-go/logging"
      7 )
      8 
      9 // loggerKey is the context value key for which the logger is associated with.
     10 type loggerKey struct{}
     11 
     12 // GetLogger takes a context to retrieve a Logger from. If no logger is present on the context a logging.Nop logger
     13 // is returned. If the logger retrieved from context supports the ContextLogger interface, the context will be passed
     14 // to the WithContext method and the resulting logger will be returned. Otherwise the stored logger is returned as is.
     15 func GetLogger(ctx context.Context) logging.Logger {
     16 	logger, ok := ctx.Value(loggerKey{}).(logging.Logger)
     17 	if !ok || logger == nil {
     18 		return logging.Nop{}
     19 	}
     20 
     21 	return logging.WithContext(ctx, logger)
     22 }
     23 
     24 // SetLogger sets the provided logger value on the provided ctx.
     25 func SetLogger(ctx context.Context, logger logging.Logger) context.Context {
     26 	return context.WithValue(ctx, loggerKey{}, logger)
     27 }
     28 
     29 type setLogger struct {
     30 	Logger logging.Logger
     31 }
     32 
     33 // AddSetLoggerMiddleware adds a middleware that will add the provided logger to the middleware context.
     34 func AddSetLoggerMiddleware(stack *Stack, logger logging.Logger) error {
     35 	return stack.Initialize.Add(&setLogger{Logger: logger}, After)
     36 }
     37 
     38 func (a *setLogger) ID() string {
     39 	return "SetLogger"
     40 }
     41 
     42 func (a *setLogger) HandleInitialize(ctx context.Context, in InitializeInput, next InitializeHandler) (
     43 	out InitializeOutput, metadata Metadata, err error,
     44 ) {
     45 	return next.HandleInitialize(SetLogger(ctx, a.Logger), in)
     46 }