From 2324d738bc828ed23d89695defeef8444452b2f7 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Mon, 22 Jan 2024 10:29:58 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=8A=20Add=20WithLogger=20so=20we=20can?= =?UTF-8?q?=20log=20the=20rendered=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- middleware.go | 6 ++++++ middleware_test.go | 13 +++++++++++++ options.go | 10 ++++++++++ 3 files changed, 29 insertions(+) diff --git a/middleware.go b/middleware.go index 3f18098..ff74fff 100644 --- a/middleware.go +++ b/middleware.go @@ -48,6 +48,12 @@ func ErrorMiddleware(opts ...Option) gin.HandlerFunc { re = rErrors.NewInternalError("%w", err) } + for _, logger := range conf.loggers { + logger(c, re) + } + + c.Set("rendered_error", re) + c.JSON(re.Status(), re) } } diff --git a/middleware_test.go b/middleware_test.go index 6a99f4d..549843d 100644 --- a/middleware_test.go +++ b/middleware_test.go @@ -5,6 +5,7 @@ import ( "errors" "net/http" "net/http/httptest" + "strings" "testing" rErrors "codeberg.org/danjones000/responsable-errors" @@ -117,3 +118,15 @@ func (s *MiddlewareTestSuite) TestNoWorkingTransformer() { s.Assert().Equal("Unknown Error", outMsg) s.Assert().Equal(http.StatusInternalServerError, s.w.Code) } + +func (s *MiddlewareTestSuite) TestLogger() { + buff := strings.Builder{} + var l LoggerFunc = func(c *gin.Context, err rErrors.ResponsableError) { + buff.WriteString("Err: " + err.Error()) + } + err := errors.New("Foo") + s.ctx.Error(err) + ErrorMiddleware(WithLogger(l))(s.ctx) + + s.Assert().Equal("Err: Foo", buff.String()) +} diff --git a/options.go b/options.go index ba31f25..292d007 100644 --- a/options.go +++ b/options.go @@ -8,13 +8,23 @@ import ( ) type config struct { + loggers []LoggerFunc transformers []Transformer } +type LoggerFunc func(*gin.Context, rErrors.ResponsableError) + type Transformer func(error) rErrors.ResponsableError type Option func(config) config +func WithLogger(logger LoggerFunc) Option { + return func(c config) config { + c.loggers = append(c.loggers, logger) + return c + } +} + func WithTransformer(tr Transformer) Option { return func(c config) config { c.transformers = append(c.transformers, tr)