From 1bba52a6d83821cf0134743ef503e25c4f3b38eb Mon Sep 17 00:00:00 2001 From: Pengkuh Dwi Septiandi Date: Thu, 30 Mar 2023 20:47:05 +0700 Subject: [PATCH 1/5] feat: update Middleware filter ability - middleware now can receive multiple filter with type string (optional) - middleware filter with function now renamed to MiddlewareFunc --- echolog.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/echolog.go b/echolog.go index ccf3a99..efc16e6 100644 --- a/echolog.go +++ b/echolog.go @@ -51,8 +51,8 @@ func (l *logFields) MarshalZerologObject(e *zerolog.Event) { } } -// Middleware contains functionality of request_id, logger and recover for request traceability -func Middleware(filter func(c echo.Context) bool) echo.MiddlewareFunc { +// MiddlewareFilterFunc contains functionality of request_id, logger and recover for request traceability +func MiddlewareFilterFunc(filter func(c echo.Context) bool) echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { @@ -143,6 +143,27 @@ func Middleware(filter func(c echo.Context) bool) echo.MiddlewareFunc { } } +// Middleware contains functionality to filter Request URI with paramater type of string +func Middleware(filters ...string) echo.MiddlewareFunc { + if len(filters) > 0 { + return MiddlewareFilterFunc(func(c echo.Context) bool { + return filtered(c, filters) + }) + } + + return MiddlewareFilterFunc(nil) +} + +func filtered(c echo.Context, filters []string) bool { + for _, filter := range filters { + if c.Request().RequestURI == filter { + return true + } + } + + return false +} + func formatReqBody(data []byte) string { var js map[string]interface{} if json.Unmarshal(data, &js) != nil { From 4821c827a5ab022c74f8a419c1e8706df279598f Mon Sep 17 00:00:00 2001 From: Pengkuh Dwi Septiandi Date: Thu, 30 Mar 2023 20:47:30 +0700 Subject: [PATCH 2/5] docs: update readme --- README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 435e6bf..72caa31 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,19 @@ func filter(c echo.Context) bool { func main() { e := echo.New() - e.Use(echolog.Middleware(filter)) + // simple apply middleware without filter + e.Use(echolog.Middleware()) + // with filter + e.Use(echolog.Middleware("/healthcheck")) + // add more filter + e.Use(echolog.Middleware("/healthcheck", "foo", "bar")) + + // you can also do this + e.Use(echolog.MiddlewareFilterFunc(filter)) + // or without filter + // e.Use(echolog.MiddlewareFilterFunc(nil)) // Output: {"level":"info","request_id":"9627a4a0-9d94-4ab6-844c-9599c0a15cd0","remote_ip":"[::1]:62542","host":"localhost:8080","method":"GET","path":"/","body":"","status_code":200,"latency":0,"tag":"request","time":"2023-02-19T14:07:37+07:00","message":"success"} - // Or without filter - // r.Use(echolog.Middleware(nil)) - e.GET("/", func(c echo.Context) error { ctx := c.Request().Context() log.Ctx(ctx).Info().Msg("hello world") From 7a8355833b0d35e364f09adfb33f05e916008dae Mon Sep 17 00:00:00 2001 From: Pengkuh Dwi Septiandi Date: Fri, 31 Mar 2023 04:25:39 +0700 Subject: [PATCH 3/5] refactor: rename back MiddlewareFilterFunc to Middleware --- echolog.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/echolog.go b/echolog.go index efc16e6..b5e01cb 100644 --- a/echolog.go +++ b/echolog.go @@ -51,8 +51,8 @@ func (l *logFields) MarshalZerologObject(e *zerolog.Event) { } } -// MiddlewareFilterFunc contains functionality of request_id, logger and recover for request traceability -func MiddlewareFilterFunc(filter func(c echo.Context) bool) echo.MiddlewareFunc { +// Middleware contains functionality of request_id, logger and recover for request traceability +func Middleware(filter func(c echo.Context) bool) echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { @@ -146,12 +146,12 @@ func MiddlewareFilterFunc(filter func(c echo.Context) bool) echo.MiddlewareFunc // Middleware contains functionality to filter Request URI with paramater type of string func Middleware(filters ...string) echo.MiddlewareFunc { if len(filters) > 0 { - return MiddlewareFilterFunc(func(c echo.Context) bool { + return Middleware(func(c echo.Context) bool { return filtered(c, filters) }) } - return MiddlewareFilterFunc(nil) + return Middleware(nil) } func filtered(c echo.Context, filters []string) bool { From 6ae28370b9ad87656bff432cd2d1a1e369d4a267 Mon Sep 17 00:00:00 2001 From: Pengkuh Dwi Septiandi Date: Fri, 31 Mar 2023 04:26:37 +0700 Subject: [PATCH 4/5] refactor: rename Middleware of type variadic function to 'Default' --- echolog.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/echolog.go b/echolog.go index b5e01cb..3f6847c 100644 --- a/echolog.go +++ b/echolog.go @@ -143,8 +143,8 @@ func Middleware(filter func(c echo.Context) bool) echo.MiddlewareFunc { } } -// Middleware contains functionality to filter Request URI with paramater type of string -func Middleware(filters ...string) echo.MiddlewareFunc { +// Default contains functionality to filter Request URI with paramater type of string +func Default(filters ...string) echo.MiddlewareFunc { if len(filters) > 0 { return Middleware(func(c echo.Context) bool { return filtered(c, filters) From b364fc9df2cc65965f77db8a07e6028c33c86145 Mon Sep 17 00:00:00 2001 From: Pengkuh Dwi Septiandi Date: Fri, 31 Mar 2023 04:27:28 +0700 Subject: [PATCH 5/5] docs: update readme --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 72caa31..5d8d991 100644 --- a/README.md +++ b/README.md @@ -27,16 +27,16 @@ func filter(c echo.Context) bool { func main() { e := echo.New() // simple apply middleware without filter - e.Use(echolog.Middleware()) + e.Use(echolog.Default()) // with filter - e.Use(echolog.Middleware("/healthcheck")) + e.Use(echolog.Default("/healthcheck")) // add more filter - e.Use(echolog.Middleware("/healthcheck", "foo", "bar")) + e.Use(echolog.Default("/healthcheck", "foo", "bar")) // you can also do this - e.Use(echolog.MiddlewareFilterFunc(filter)) + e.Use(echolog.Middleware(filter)) // or without filter - // e.Use(echolog.MiddlewareFilterFunc(nil)) + // e.Use(echolog.Middleware(nil)) // Output: {"level":"info","request_id":"9627a4a0-9d94-4ab6-844c-9599c0a15cd0","remote_ip":"[::1]:62542","host":"localhost:8080","method":"GET","path":"/","body":"","status_code":200,"latency":0,"tag":"request","time":"2023-02-19T14:07:37+07:00","message":"success"} e.GET("/", func(c echo.Context) error {