| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- 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)
- }
- }
- }
|