generated from PenaSide/GolangTemplate
add middle ware for saving loget in req ctx, and add loging user req data ip path domen port
This commit is contained in:
parent
1b2ab7977f
commit
5eb909047b
@ -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,
|
||||
}
|
||||
|
||||
|
42
internal/utils/logger_middleware.go
Normal file
42
internal/utils/logger_middleware.go
Normal file
@ -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()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user