Skip to content

Commit

Permalink
add logger middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
negrel committed Jan 10, 2024
1 parent f71aa22 commit 8d599e5
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 0 deletions.
24 changes: 24 additions & 0 deletions internal/middlewares/logger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package middlewares

import (
"github.com/gofiber/fiber/v2"
"github.com/prismelabs/prismeanalytics/internal/log"
"github.com/rs/zerolog"
)

type LoggerKey struct{}

func Logger(logger log.Logger) fiber.Handler {
appLogger := logger
return func(c *fiber.Ctx) error {
logger = appLogger
logger.UpdateContext(func(ctx zerolog.Context) zerolog.Context {
requestId := c.Locals(RequestIdKey{}).(string)
return ctx.Str("request_id", requestId)
})

c.Locals(LoggerKey{}, logger)
err := c.Next()
return err
}
}
67 changes: 67 additions & 0 deletions internal/middlewares/logger_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package middlewares

import (
"bytes"
"io"
"net/http"
"net/http/httptest"
"testing"

"github.com/gofiber/fiber/v2"
"github.com/prismelabs/prismeanalytics/internal/config"
"github.com/prismelabs/prismeanalytics/internal/log"
"github.com/stretchr/testify/require"
)

func TestLogger(t *testing.T) {
t.Run("WithoutRequestIdMiddleware/Panics", func(t *testing.T) {
logger := log.NewLogger("app_log", io.Discard, false)

app := fiber.New()
app.Use(func(c *fiber.Ctx) error {
require.Panics(t, func() {
c.Next()
})
return nil
})
app.Use(Logger(logger))
app.Use(func(c *fiber.Ctx) error {
return nil
})

req := httptest.NewRequest(http.MethodGet, "/", nil)

_, err := app.Test(req)
require.NoError(t, err)
})

t.Run("WithRequestIdMiddleware", func(t *testing.T) {
loggerOutput := bytes.Buffer{}
logger := log.NewLogger("app_log", &loggerOutput, false)

app := fiber.New()
app.Use(RequestId(config.Server{}))
app.Use(Logger(logger))
app.Use(func(c *fiber.Ctx) error {
logger := c.Locals(LoggerKey{}).(log.Logger)
logger.Info().Msg("hello from middleware")
return nil
})

req := httptest.NewRequest(http.MethodGet, "/hello", nil)

_, err := app.Test(req)
require.NoError(t, err)

actual := loggerOutput.String()
require.Regexp(t, `{"v":0,`+
`"pid":\d+,`+
`"hostname":"[^"]+",`+
`"name":"app_log",`+
`"request_id":"[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}",`+
`"level":30,`+
`"time":"((?:(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}(?:\.\d+)?))(Z|[\+-]\d{2}:\d{2})?)",`+
`"msg":"hello from middleware"}`,
actual)
})
}

0 comments on commit 8d599e5

Please sign in to comment.