It is likely that an application using slog will want to use its own pre-configured *slog.Logger or provide a slog.Handler that a logger should be created from.
The design of the package makes it confusing to do this.
Sure, I can manually create a httplog.Logger, but the options mix what is required for "configuring the logger" and what is used in logging.
l := &httplog.Logger{
Logger: myExistingSlogLogger,
Options: httplog.Options{
JSON: true, // I'm guessing this does nothing
},
}
I would suggest that the package asks only for a slog.Handler and only uses options to configure what to log:
func Handler(h slog.Handler, opts Options) func(next http.Handler) http.Handler {
if h == nil {
h = slog.Default().Handler()
}
// implementation
}
type Options struct {
// Level determines what level to log request details at
Level slog.Level
// Concise mode includes fewer log details during the request flow. For example
// excluding details like request content length, user-agent and other details.
// This is useful if during development your console is too noisy.
Concise bool
// RequestHeaders enables logging of all request headers, however sensitive
// headers like authorization, cookie and set-cookie are hidden.
RequestHeaders bool
// SkipRequestHeaders are additional requests headers which are redacted from the logs
SkipRequestHeaders []string
// QuietDownRoutes are routes which are temporarily excluded from logging for a QuietDownPeriod after it occurs
// for the first time
// to cancel noise from logging for routes that are known to be noisy.
QuietDownRoutes []string
// QuietDownPeriod is the duration for which a route is excluded from logging after it occurs for the first time
// if the route is in QuietDownRoutes
QuietDownPeriod time.Duration
}
I understand that my changes would be breaking (so that means a v3 so soon after a v2), but I think it becomes easier to use with other slog compatible packages.
It is likely that an application using
slogwill want to use its own pre-configured*slog.Loggeror provide aslog.Handlerthat a logger should be created from.The design of the package makes it confusing to do this.
Sure, I can manually create a
httplog.Logger, but the options mix what is required for "configuring the logger" and what is used in logging.I would suggest that the package asks only for a
slog.Handlerand only uses options to configure what to log:I understand that my changes would be breaking (so that means a
v3so soon after av2), but I think it becomes easier to use with other slog compatible packages.