package logger type options struct { level Level format Format output Output outputFile string caller bool fieldKey string prefix string timeFormat string } type Option func(*options) func WithLevel(level Level) Option { return func(o *options) { o.level = level } } func WithFormat(format Format) Option { return func(o *options) { o.format = format } } func WithOutput(output Output) Option { return func(o *options) { o.output = output } } func WithOutputFile(file string) Option { return func(o *options) { o.outputFile = file } } func WithCaller(caller bool) Option { return func(o *options) { o.caller = caller } } func WithFieldKey(key string) Option { return func(o *options) { o.fieldKey = key } } func WithPrefix(prefix string) Option { return func(o *options) { o.prefix = prefix } } func WithTimeFormat(format string) Option { return func(o *options) { o.timeFormat = format } } func defaultOptions() options { return options{ level: INFO, format: TEXT, output: Stdout, outputFile: "", caller: false, fieldKey: "trace_id", prefix: "", timeFormat: "2006-01-02 15:04:05", } }