github.com/micro/go-micro/v2@v2.9.1/logger/options.go (about)

     1  package logger
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  )
     7  
     8  type Option func(*Options)
     9  
    10  type Options struct {
    11  	// The logging level the logger should log at. default is `InfoLevel`
    12  	Level Level
    13  	// fields to always be logged
    14  	Fields map[string]interface{}
    15  	// It's common to set this to a file, or leave it default which is `os.Stderr`
    16  	Out io.Writer
    17  	// Caller skip frame count for file:line info
    18  	CallerSkipCount int
    19  	// Alternative options
    20  	Context context.Context
    21  }
    22  
    23  // WithFields set default fields for the logger
    24  func WithFields(fields map[string]interface{}) Option {
    25  	return func(args *Options) {
    26  		args.Fields = fields
    27  	}
    28  }
    29  
    30  // WithLevel set default level for the logger
    31  func WithLevel(level Level) Option {
    32  	return func(args *Options) {
    33  		args.Level = level
    34  	}
    35  }
    36  
    37  // WithOutput set default output writer for the logger
    38  func WithOutput(out io.Writer) Option {
    39  	return func(args *Options) {
    40  		args.Out = out
    41  	}
    42  }
    43  
    44  // WithCallerSkipCount set frame count to skip
    45  func WithCallerSkipCount(c int) Option {
    46  	return func(args *Options) {
    47  		args.CallerSkipCount = c
    48  	}
    49  }
    50  
    51  func SetOption(k, v interface{}) Option {
    52  	return func(o *Options) {
    53  		if o.Context == nil {
    54  			o.Context = context.Background()
    55  		}
    56  		o.Context = context.WithValue(o.Context, k, v)
    57  	}
    58  }