50 lines
939 B
Go
50 lines
939 B
Go
package middlewares
|
|
|
|
import (
|
|
"time"
|
|
|
|
"git.secnex.io/secnex/masterlog"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
// RequestLogger logs incoming HTTP requests via masterlog.
|
|
func RequestLogger() fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
start := time.Now()
|
|
err := c.Next()
|
|
duration := time.Since(start)
|
|
|
|
entry := map[string]interface{}{
|
|
"method": c.Method(),
|
|
"path": c.OriginalURL(),
|
|
"ip": c.IP(),
|
|
"duration": duration.String(),
|
|
"status": c.Response().StatusCode(),
|
|
"user_agent": c.Get("User-Agent"),
|
|
}
|
|
|
|
if err != nil {
|
|
entry["error"] = err.Error()
|
|
masterlog.Error(
|
|
"HTTP request failed",
|
|
entry,
|
|
)
|
|
return err
|
|
}
|
|
|
|
if status := c.Response().StatusCode(); status >= fiber.StatusInternalServerError {
|
|
masterlog.Error(
|
|
"HTTP request failed",
|
|
entry,
|
|
)
|
|
} else {
|
|
masterlog.Info(
|
|
"HTTP request successful",
|
|
entry,
|
|
)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
}
|