add middle ware for saving loget in req ctx, and add loging user req data ip path domen port

This commit is contained in:
Pavel 2024-05-21 21:22:38 +03:00
parent 1b2ab7977f
commit 5eb909047b
5 changed files with 58 additions and 3 deletions

@ -58,11 +58,11 @@ func Run(config *models.Config, logger *zap.Logger) (appErr error) {
// panic(err)
//}
logger = logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.NewTee(core, clickHouseLogger /*telegrammLogger*/)
loggerForHlog := logger.WithOptions(zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return zapcore.NewTee(core, clickHouseLogger)
}))
loggerHlog := hlog.New(logger).Module("customer")
loggerHlog := hlog.New(loggerForHlog).Module("customer")
loggerHlog.Emit(app.InfoSvcStarted{})
if err := kafka.Initialize(ctx, config.Service.Kafka.Brokers, []string{
@ -145,6 +145,7 @@ func Run(config *models.Config, logger *zap.Logger) (appErr error) {
serverHTTP := server.NewServer(server.ServerConfig{
Logger: logger,
Hlog: loggerHlog,
Controllers: []server.Controller{httpControllers.CurrencyController, httpControllers.HistoryController, httpControllers.CartController, httpControllers.WalletController, httpControllers.AccountController},
JWTConfig: &config.Service.JWT,
})

@ -3,6 +3,7 @@ package http
import (
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/themakers/hlog"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
)
@ -53,3 +54,8 @@ func (mw *MiddleWare) ExtractToken(ctx *fiber.Ctx) (string, bool) {
func (mw *MiddleWare) GetHealth(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).SendString("OK")
}
func (mw *MiddleWare) ExtractLogger(ctx *fiber.Ctx) (hlog.Logger, bool) {
logger, ok := ctx.Context().UserValue(models.LoggerKey).(hlog.Logger)
return logger, ok
}

@ -15,3 +15,4 @@ type User struct {
const AuthJWTDecodedUserIDKey = "userID"
const AuthJWTDecodedAccessTokenKey = "access-token"
const LoggerKey = "logger"

@ -4,6 +4,7 @@ import (
"context"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/themakers/hlog"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/utils"
@ -11,12 +12,14 @@ import (
type ServerConfig struct {
Logger *zap.Logger
Hlog hlog.Logger
Controllers []Controller
JWTConfig *models.JWTConfiguration
}
type Server struct {
Logger *zap.Logger
Hlog hlog.Logger
Controllers []Controller
app *fiber.App
}
@ -26,10 +29,12 @@ func NewServer(config ServerConfig) *Server {
jwtUtil := utils.NewJWT(config.JWTConfig)
app.Use(utils.NewAuthenticator(jwtUtil))
app.Use(utils.ContextLogger(config.Hlog))
s := &Server{
Logger: config.Logger,
Controllers: config.Controllers,
Hlog: config.Hlog,
app: app,
}

@ -0,0 +1,42 @@
package utils
import (
"github.com/gofiber/fiber/v2"
"github.com/themakers/hlog"
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
"strings"
)
type InfoUser struct {
CtxUserIP string
CtxUserPort string
KeyDomain string
KeyPath string
}
func ContextLogger(logger hlog.Logger) fiber.Handler {
return func(c *fiber.Ctx) error {
userIP := c.IP()
userPort := c.Port()
domain := strings.Join(c.Subdomains(), "/")
path := c.Path()
logger.With(map[string]string{
"CtxUserIP": userIP,
"CtxUserPort": userPort,
"KeyDomain": domain,
"KeyPath": path,
})
logger.Emit(InfoUser{
CtxUserIP: userIP,
CtxUserPort: userPort,
KeyPath: path,
KeyDomain: domain,
})
c.Locals(models.LoggerKey, logger)
return c.Next()
}
}