Feature Request: Use `log/slog` instead of Zap
stephenafamo opened this issue ยท 8 comments
Now that structured logging is part of the standard libarary, are there any plans to switch to log/slog
?
Since Caddy is the primary consumer of certmagic and the whole Caddy plugin ecosystem uses zap, it would be very difficult to change that at this point.
I could see a Caddy v3 causing us to change over, but I don't think we will take the effort to do that anytime soon.
I guess the ideal situation is to have a way to create a zapcore.Core
that pipes output to a slog.Handler
and then create a *zap.Logger
from that Core
that will be passed to certmagic.
I guess so. I don't know how interop between them looks like, I haven't looked into it. But that sounds reasonable for now.
Are std libs lobs zero-allocation?
If they aren't, I don't think moving will have any performance benefit.
For the user, it wouldn't be about performance but about interoperability.
For example, if I am starting a new project now, I will use slog
for my structured logging. It would be nice that if I need to configure certmagic
I can pass in my already existing logger.
I understand going all in on zap
before slog
was available, or even just in the interest of performance.
Thinking about this more, perhaps there is no need for certmagic and the rest of the Caddy ecosystem to change, there just needs to be an easy way to create a zap logger from slog
.
Understood; but we can't impact the TLS server's performance like that -- logs that allocate would significantly reduce the performance of the server given how many logs we emit.
But, yeah, if what you're actually asking for is interop, then maybe a feature request for zap to integrate with slog in some way would be the best way to go. It wouldn't necessarily be as fast of course, but then CertMagic wouldn't have to change and you could still use your slog with CertMagic.
I'll close this but we can reopen if something becomes actionable for us ๐
Did some quick googling...
slog
recommends using the Logger.LogAttrs
API for zero-allocation logging (instead of Logger.Log
).
Apparently there's interop between slog can use zap as a logging backend if a Handler
is provided. https://github.com/chanchal1987/zaphandler is an example.
Actually, looks like zap added some compat in uber-go/zap#1246