mirror of
https://github.com/slackhq/nebula.git
synced 2026-05-11 14:42:02 -07:00
90 lines
2.1 KiB
Go
90 lines
2.1 KiB
Go
package logging
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"log/slog"
|
|
"testing"
|
|
)
|
|
|
|
// BenchmarkLogger_* compare the handler returned by NewLogger against a
|
|
// stock slog text handler. The key thing we care about is the per-log
|
|
// cost on a logger that has been derived via .With(), because that is the
|
|
// shape subsystems store on their structs (HostInfo.logger(),
|
|
// lh.l.With("subsystem", ...), etc.) and call from hot paths.
|
|
|
|
func BenchmarkLogger_Stock_RootInfo(b *testing.B) {
|
|
l := slog.New(slog.DiscardHandler)
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
l.Info("hello", "i", i)
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogger_Nebula_RootInfo(b *testing.B) {
|
|
l := NewLogger(io.Discard)
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
l.Info("hello", "i", i)
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogger_Stock_DerivedInfo(b *testing.B) {
|
|
l := slog.New(slog.DiscardHandler).With(
|
|
"subsystem", "bench",
|
|
"localIndex", 1234,
|
|
)
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
l.Info("hello", "i", i)
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogger_Nebula_DerivedInfo(b *testing.B) {
|
|
l := NewLogger(io.Discard).With(
|
|
"subsystem", "bench",
|
|
"localIndex", 1234,
|
|
)
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
l.Info("hello", "i", i)
|
|
}
|
|
}
|
|
|
|
// Gated-off-path benchmarks: mimic the typical hot-path shape
|
|
// `if l.Enabled(ctx, slog.LevelDebug) { ... }` where the log is gated below
|
|
// the active level. This is the dominant pattern in inside.go/outside.go and
|
|
// what we pay on every packet.
|
|
func BenchmarkLogger_Stock_DerivedEnabledGateMiss(b *testing.B) {
|
|
l := slog.New(slog.DiscardHandler).With(
|
|
"subsystem", "bench",
|
|
"localIndex", 1234,
|
|
)
|
|
ctx := context.Background()
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
if l.Enabled(ctx, slog.LevelDebug) {
|
|
l.Debug("hello", "i", i)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogger_Nebula_DerivedEnabledGateMiss(b *testing.B) {
|
|
l := NewLogger(io.Discard).With(
|
|
"subsystem", "bench",
|
|
"localIndex", 1234,
|
|
)
|
|
ctx := context.Background()
|
|
b.ReportAllocs()
|
|
b.ResetTimer()
|
|
for i := 0; i < b.N; i++ {
|
|
if l.Enabled(ctx, slog.LevelDebug) {
|
|
l.Debug("hello", "i", i)
|
|
}
|
|
}
|
|
}
|