fleet/server/service/middleware/log/log.go

47 lines
1.2 KiB
Go
Raw Normal View History

package log
import (
"context"
"net/http"
"github.com/fleetdm/fleet/v4/server/contexts/logging"
"github.com/go-kit/kit/endpoint"
kitlog "github.com/go-kit/log"
)
// Logged wraps an endpoint and adds the error if the context supports it
func Logged(next endpoint.Endpoint) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
res, err := next(ctx, request)
if err != nil {
logging.WithErr(ctx, err)
return nil, err
}
if errResp, ok := res.(interface{ Error() error }); ok {
err = errResp.Error()
if err != nil {
logging.WithErr(ctx, err)
}
}
return res, nil
}
}
func LogRequestEnd(logger kitlog.Logger) func(context.Context, http.ResponseWriter) context.Context {
return func(ctx context.Context, w http.ResponseWriter) context.Context {
logCtx, ok := logging.FromContext(ctx)
if !ok {
return ctx
}
logCtx.Log(ctx, logger)
return ctx
}
}
func LogResponseEndMiddleware(logger kitlog.Logger, next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
next.ServeHTTP(w, r)
LogRequestEnd(logger)(r.Context(), w)
})
}