package middleware import ( "log/slog" ) // Option configures a middleware that logs, such as NewCSRF, Logger or // Recoverer. type Option func(*options) // options holds the settings Options change. type options struct { log *slog.Logger } // WithLogger makes a middleware log to logger instead of slog.Default(). func WithLogger(logger *slog.Logger) Option { return func(opts *options) { opts.log = logger } } // applyOptions returns the settings opts make. func applyOptions(opts []Option) options { var settings options for _, opt := range opts { opt(&settings) } return settings } // logger returns the logger to use, tagged with component: the given one, or // slog.Default(), looked up now. func (opts options) logger(component string) *slog.Logger { log := opts.log if log == nil { log = slog.Default() } return log.With("component", component) }