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 }