Add log.ToLogger and log.ToSlogger helper functions (#3629)
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/TheZeroSlave/zapsentry"
|
||||
@@ -184,6 +186,16 @@ func WithGlobalRedaction() func(*sinkConfig) {
|
||||
}
|
||||
}
|
||||
|
||||
// ToLogger converts the logr.Logger into a legacy *log.Logger.
|
||||
func ToLogger(l logr.Logger) *log.Logger {
|
||||
return slog.NewLogLogger(logr.ToSlogHandler(l), slog.LevelInfo)
|
||||
}
|
||||
|
||||
// ToSlogger converts the logr.Logger into a *slog.Logger.
|
||||
func ToSlogger(l logr.Logger) *slog.Logger {
|
||||
return slog.New(logr.ToSlogHandler(l))
|
||||
}
|
||||
|
||||
// firstErrorFunc is a helper function that returns a function that executes
|
||||
// all provided args and returns the first error, if any.
|
||||
func firstErrorFunc(fs ...func() error) func() error {
|
||||
|
||||
@@ -290,6 +290,52 @@ func TestGlobalRedaction_JSON(t *testing.T) {
|
||||
)
|
||||
}
|
||||
|
||||
func TestToLogger(t *testing.T) {
|
||||
var jsonBuffer bytes.Buffer
|
||||
l, flush := New("service-name",
|
||||
WithJSONSink(&jsonBuffer),
|
||||
)
|
||||
logger := ToLogger(l)
|
||||
logger.Println("yay")
|
||||
assert.Nil(t, flush())
|
||||
|
||||
var parsedJSON map[string]any
|
||||
assert.Nil(t, json.Unmarshal(jsonBuffer.Bytes(), &parsedJSON))
|
||||
assert.NotEmpty(t, parsedJSON["ts"])
|
||||
delete(parsedJSON, "ts")
|
||||
delete(parsedJSON, "caller") // log.Logger adds a "caller" field
|
||||
assert.Equal(t,
|
||||
map[string]any{
|
||||
"level": "info-0",
|
||||
"logger": "service-name",
|
||||
"msg": "yay",
|
||||
},
|
||||
parsedJSON,
|
||||
)
|
||||
}
|
||||
|
||||
func TestToSlogger(t *testing.T) {
|
||||
var jsonBuffer bytes.Buffer
|
||||
l, flush := New("service-name", WithJSONSink(&jsonBuffer))
|
||||
logger := ToSlogger(l)
|
||||
logger.Info("yay")
|
||||
assert.Nil(t, flush())
|
||||
|
||||
var parsedJSON map[string]any
|
||||
assert.Nil(t, json.Unmarshal(jsonBuffer.Bytes(), &parsedJSON))
|
||||
assert.NotEmpty(t, parsedJSON["ts"])
|
||||
delete(parsedJSON, "ts")
|
||||
delete(parsedJSON, "caller") // slog.Logger adds a "caller" field
|
||||
assert.Equal(t,
|
||||
map[string]any{
|
||||
"level": "info-0",
|
||||
"logger": "service-name",
|
||||
"msg": "yay",
|
||||
},
|
||||
parsedJSON,
|
||||
)
|
||||
}
|
||||
|
||||
func BenchmarkLoggerRedact(b *testing.B) {
|
||||
msg := "this is a message with 'foo' in it"
|
||||
logKvps := []any{"key", "value", "foo", "bar", "bar", "baz", "longval", "84hblnqwp97ewilbgoab8fhqlngahs6dl3i269haa"}
|
||||
|
||||
Reference in New Issue
Block a user