feat!(smalltrip,router): log handler type name and package on Handle and HandleFunc

This commit is contained in:
Guz
2025-08-08 19:16:44 -03:00
parent cd50d412bb
commit bb43d4803a

View File

@@ -20,6 +20,8 @@ import (
"io" "io"
"log/slog" "log/slog"
"net/http" "net/http"
"reflect"
"runtime"
"forge.capytal.company/loreddev/x/smalltrip/middleware" "forge.capytal.company/loreddev/x/smalltrip/middleware"
"forge.capytal.company/loreddev/x/smalltrip/multiplexer" "forge.capytal.company/loreddev/x/smalltrip/multiplexer"
@@ -53,15 +55,25 @@ func NewRouter(options ...Option) Router {
} }
func (router *router) HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) { func (router *router) HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) {
router.Handle(pattern, http.HandlerFunc(handler)) log := router.log.With(slog.String("pattern", pattern), slog.String("handler", getValueType(handler)))
log.Info("Adding route")
var hf http.Handler = http.HandlerFunc(handler)
for _, m := range router.mws {
log.Debug("Wrapping with middleware", slog.String("middleware", getValueType(m)))
hf = m(hf)
}
router.mux.Handle(pattern, hf)
} }
func (router *router) Handle(pattern string, handler http.Handler) { func (router *router) Handle(pattern string, handler http.Handler) {
log := router.log.With(slog.String("pattern", pattern), slog.String("handler", fmt.Sprintf("%T", handler))) log := router.log.With(slog.String("pattern", pattern), slog.String("handler", getValueType(handler)))
log.Info("Adding route") log.Info("Adding route")
for _, m := range router.mws { for _, m := range router.mws {
log.Debug("Wrapping with middleware", slog.String("middleware", fmt.Sprintf("%T", m))) log.Debug("Wrapping with middleware", slog.String("middleware", getValueType(m)))
handler = m(handler) handler = m(handler)
} }
@@ -69,7 +81,7 @@ func (router *router) Handle(pattern string, handler http.Handler) {
} }
func (router *router) Use(m middleware.Middleware) { func (router *router) Use(m middleware.Middleware) {
router.log.Info("Middleware added", slog.String("middleware", fmt.Sprintf("%T", m))) router.log.Info("Middleware added", slog.String("middleware", getValueType(m)))
if router.mws == nil { if router.mws == nil {
router.mws = []middleware.Middleware{} router.mws = []middleware.Middleware{}
@@ -84,3 +96,30 @@ func (router *router) Handler(r *http.Request) (http.Handler, string) {
func (router *router) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (router *router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
router.mux.ServeHTTP(w, r) router.mux.ServeHTTP(w, r)
} }
func getValueType[T any](value T) (name string) {
defer func() {
if rc := recover(); rc != nil {
name = fmt.Sprintf("%T", value)
}
}()
v := reflect.ValueOf(value)
if v.Kind() == reflect.Pointer {
return getValueType(v.Elem().Interface())
}
if v.Kind() == reflect.Func {
fc := runtime.FuncForPC(v.Pointer())
if fc != nil {
return fc.Name()
}
}
if p, n := v.Type().PkgPath(), v.Type().Name(); p != "" && n != "" {
return fmt.Sprintf("%s.%s", p, n)
}
return fmt.Sprintf("%T", value)
}