Add log.ToLogger and log.ToSlogger helper functions (#3629)
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
|
"log/slog"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/TheZeroSlave/zapsentry"
|
"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
|
// firstErrorFunc is a helper function that returns a function that executes
|
||||||
// all provided args and returns the first error, if any.
|
// all provided args and returns the first error, if any.
|
||||||
func firstErrorFunc(fs ...func() error) func() error {
|
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) {
|
func BenchmarkLoggerRedact(b *testing.B) {
|
||||||
msg := "this is a message with 'foo' in it"
|
msg := "this is a message with 'foo' in it"
|
||||||
logKvps := []any{"key", "value", "foo", "bar", "bar", "baz", "longval", "84hblnqwp97ewilbgoab8fhqlngahs6dl3i269haa"}
|
logKvps := []any{"key", "value", "foo", "bar", "bar", "baz", "longval", "84hblnqwp97ewilbgoab8fhqlngahs6dl3i269haa"}
|
||||||
|
|||||||
Reference in New Issue
Block a user