Add logging across app and centralized error handling

This commit is contained in:
Andrey Chervyakov 2021-03-15 19:03:30 +06:00
parent 3bbeab1199
commit 4c3f095109
10 changed files with 115 additions and 62 deletions

View file

@ -1,17 +1,22 @@
package cgnolink
import (
apperrors "cgnolink/errors"
"cgnolink/link"
appmiddleware "cgnolink/middleware"
"github.com/jackc/pgx/v4/pgxpool"
"github.com/knadh/koanf"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"github.com/rs/zerolog/log"
"net/http"
)
func NewServer(conf *koanf.Koanf, pool *pgxpool.Pool) *echo.Echo {
server := echo.New()
server.HTTPErrorHandler = errorHandler(server)
addMiddleware(server, conf)
addHandlers(server, pool)
@ -21,7 +26,7 @@ func NewServer(conf *koanf.Koanf, pool *pgxpool.Pool) *echo.Echo {
func addMiddleware(s *echo.Echo, conf *koanf.Koanf) {
s.Use(middleware.CORS())
s.Use(middleware.Logger())
s.Use(appmiddleware.Logger())
s.Use(middleware.JWTWithConfig(middleware.JWTConfig{
Skipper: func(ctx echo.Context) bool {
@ -43,3 +48,21 @@ func addHandlers(s *echo.Echo, pool *pgxpool.Pool) {
link.AddHandlers(s, pool)
}
func errorHandler(s *echo.Echo) echo.HTTPErrorHandler {
return func(err error, c echo.Context) {
mappedErr := err
switch v := err.(type) {
case apperrors.NotFoundError:
mappedErr = echo.NewHTTPError(http.StatusNotFound, v.Error())
case apperrors.UnknownError:
log.Err(v.Err).Send()
mappedErr = echo.NewHTTPError(http.StatusInternalServerError)
case apperrors.AlreadyExistsError:
mappedErr = echo.NewHTTPError(http.StatusBadRequest, v.Error())
}
s.DefaultHTTPErrorHandler(mappedErr, c)
}
}