func newEngine()

in pkg/handlers/root.go [40:80]


func newEngine(ctx context.Context) *gin.Engine {
	gin.SetMode(gin.ReleaseMode)
	engine := gin.New()

	baseLog := zerolog.Ctx(ctx)

	engine.Use(func(c *gin.Context) {

		pc := pcontext.FromContext(c)

		pcontext.FillCorrelationId(pc)
		c.Set(pcontext.LoggerCtxKey, baseLog)

		l := pcontext.Logger(pc)
		l.Debug().Msg("request start")
		s := time.Now()

		c.Next()

		status := c.Writer.Status()
		event := l.Info()
		if status >= 400 && status < 500 {
			event = l.Warn()
		} else if status >= 500 {
			event = l.Error()
		}

		if c.Errors != nil {
			errs := []error{}
			for _, e := range c.Errors {
				errs = append(errs, e.Err)
			}
			event = event.Errs("error", errs)
		}

		event.Dur("duration", time.Duration(time.Since(s).Seconds())).Str("method", c.Request.Method).Int("status", status).Msg("request served")
	})

	engine.Use(gin.Recovery())
	return engine
}