-
Notifications
You must be signed in to change notification settings - Fork 37
Open
Description
Problem:
In case of JSON logging you must set writer every request (cause WithLogger-fn is executed every request):
// Example of JSON format log
r.GET("/json", logger.SetLogger(
logger.WithLogger(func(_ *gin.Context, l zerolog.Logger) zerolog.Logger {
return l.Output(gin.DefaultWriter).With().Logger()
}),
), func(c *gin.Context) {
c.String(http.StatusOK, "pong "+fmt.Sprint(time.Now().Unix()))
})So the command return l.Output(gin.DefaultWriter).With().Logger() is also executed every request.
Logger.Output() method deep clones Logger with entire context:
// github.com/rs/zerolog@v1.34.0/log.go
// Output duplicates the current logger and sets w as its output.
func (l Logger) Output(w io.Writer) Logger {
l2 := New(w)
l2.level = l.level
l2.sampler = l.sampler
l2.stack = l.stack
if len(l.hooks) > 0 {
l2.hooks = append(l2.hooks, l.hooks...)
}
if l.context != nil {
l2.context = make([]byte, len(l.context), cap(l.context))
copy(l2.context, l.context)
}
return l2
}So in case of JSON logging runtime deep clones logger with the entire context every request. I'm sure it's not a desired behaviour for the majority of the developes.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels