diff --git a/extra/reqlog/middleware.go b/extra/reqlog/middleware.go index 8bd1ef0..cf17a28 100644 --- a/extra/reqlog/middleware.go +++ b/extra/reqlog/middleware.go @@ -15,8 +15,11 @@ import ( ) type middleware struct { - enabled bool - verbose bool + enabled bool + verbose bool + enabledReferer bool + enabledRemoteAddr bool + enabledQuery bool } type Option func(m *middleware) @@ -35,11 +38,36 @@ func WithVerbose(on bool) Option { } } +// WithEnabledReferer configures the middleware to log request referer. +func WithEnabledReferer(on bool) Option { + return func(m *middleware) { + m.enabledReferer = on + } +} + +// WithEnabledRemoteAddr configures the middleware to log request address. +func WithEnabledRemoteAddr(on bool) Option { + return func(m *middleware) { + m.enabledRemoteAddr = on + } +} + +// WithEnabledQuery configures the middleware to log request query params. +func WithEnabledQuery(on bool) Option { + return func(m *middleware) { + m.enabledQuery = on + } +} + // WithEnv configures the middleware using the environment variable value. // For example, WithEnv("BUNDEBUG"): // - BUNDEBUG=0 - disables the middleware. // - BUNDEBUG=1 - enables the middleware. // - BUNDEBUG=2 - enables the middleware and verbose mode. +// - BUNDEBUG=3 - enables the middleware and logs request referer. +// - BUNDEBUG=4 - enables the middleware and logs request remote address. +// - BUNDEBUG=5 - enables the middleware and logs request query params. + func FromEnv(keys ...string) Option { if len(keys) == 0 { keys = []string{"BUNDEBUG"} @@ -49,6 +77,9 @@ func FromEnv(keys ...string) Option { if env, ok := os.LookupEnv(key); ok { m.enabled = env != "" && env != "0" m.verbose = env == "2" + m.enabledReferer = env == "3" + m.enabledRemoteAddr = env == "4" + m.enabledQuery = env == "5" break } } @@ -57,8 +88,11 @@ func FromEnv(keys ...string) Option { func NewMiddleware(opts ...Option) bunrouter.MiddlewareFunc { c := &middleware{ - enabled: true, - verbose: true, + enabled: true, + verbose: true, + enabledReferer: false, + enabledRemoteAddr: false, + enabledQuery: false, } for _, opt := range opts { opt(c) @@ -97,9 +131,20 @@ func (m *middleware) Middleware(next bunrouter.HandlerFunc) bunrouter.HandlerFun formatStatus(statusCode), fmt.Sprintf(" %10s ", dur.Round(time.Microsecond)), formatMethod(req.Method), - req.URL.String(), ) + if m.enabledReferer { + args = append(args, req.Header.Get("Referer")) + } + + if m.enabledRemoteAddr { + args = append(args, req.URL.String()) + } + + if m.enabledQuery { + args = append(args, req.URL.Query()) + } + if err != nil { typ := reflect.TypeOf(err).String() args = append(args,