Closed mitar closed 9 months ago
In my own code, I then made:
func WithContext(ctx context.Context, writer io.Writer, level, conditionalLevel, triggerLevel zerolog.Level) (context.Context, func(), func()) {
w := zerolog.NewTriggerLevelWriter(
writer,
conditionalLevel,
triggerLevel,
)
ctxLogger := zerolog.New(w).Level(level).With().Timestamp().Logger()
closeCtx := func() {
_ = w.Close()
}
trigger := func() {
_ = w.Trigger()
}
return ctxLogger.WithContext(ctx), closeCtx, trigger
}
One has then to call closeCtx
after the context is not used anymore.
And I then have:
func NewHandler(writer io.Writer, level, conditionalLevel, triggerLevel zerolog.Level)) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
ctx, closeCtx, trigger := WithContext(req.Context(), writer, level, conditionalLevel, triggerLevel)
defer closeCtx()
panicking := true
defer func() {
if panicking {
trigger()
}
}()
req = req.WithContext(ctx)
next.ServeHTTP(w, req)
panicking = false
})
}
}
You can find them in my zerolog wrapper package.
@rs: I addressed your review comments.
Fixes #583.