Implement v2 interface based on slog#13
Conversation
Add v2 interface as a new module alongside v1. The v2 inteface is designed for maximum compatibility purely using slog. Signed-off-by: Derek McGowan <derek@mcg.dev>
austinvazquez
left a comment
There was a problem hiding this comment.
CI will need some work for the new module, but that can be follow-up work.
In my opinion, the only block is the frame counting fix.
| if ctx == nil { | ||
| ctx = context.Background() | ||
| } | ||
| logger.LogAttrs(ctx, level, msg, entry.attr...) |
There was a problem hiding this comment.
This will be off by 1 frame count for the source. We will need to copy up some of the logging code from slog library to fix it.
Ref: https://cs.opensource.google/go/go/+/refs/tags/go1.26.2:src/log/slog/logger.go;l=271
| return logger.(*Entry) | ||
| } | ||
| return &Entry{ | ||
| logger: slog.Default(), |
There was a problem hiding this comment.
Could consider lazy evaluation of logger here. i.e. leave logger as nil.
// Log level, format, and handler configuration should be done directly
// through [log/slog] using [slog.SetDefault] before using this package.To be fair, the package doc clear states all log configuration should be done before package use, but in this case it's not too inconsequential to defer the evaluation. All the log functions already account for nil logger.
Add v2 interface as a new module alongside v1. The v2 inteface is designed for maximum compatibility purely using slog.
Since v1 and v2 will both be maintained, using the subdirectory approach for the v2 interface seems the cleanest. This code will very rarely change and may become irrelevant once directly using slog API becomes more common.
Closes #2