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
}