@@ -20,6 +20,7 @@ import (
20
20
"errors"
21
21
"io"
22
22
"io/fs"
23
+ "log/slog"
23
24
"os"
24
25
"path/filepath"
25
26
"regexp"
@@ -29,6 +30,8 @@ import (
29
30
"testing"
30
31
"time"
31
32
33
+ "github.com/go-logr/logr"
34
+ "go.uber.org/zap/zapcore"
32
35
"k8s.io/component-base/featuregate"
33
36
logsapi "k8s.io/component-base/logs/api/v1"
34
37
_ "k8s.io/component-base/logs/json/register"
@@ -93,6 +96,43 @@ func BenchmarkEncoding(b *testing.B) {
93
96
b .Fatalf ("Unexpected error configuring logging: %v" , err )
94
97
}
95
98
logger := klog .Background ()
99
+
100
+ // Edit and run with this if branch enabled to use slog instead of zapr for JSON.
101
+ if format == "json" && false {
102
+ var level slog.LevelVar
103
+ level .Set (slog .Level (- 3 )) // hack
104
+ logger = logr .FromSlogHandler (slog .NewJSONHandler (output , & slog.HandlerOptions {
105
+ AddSource : true ,
106
+ Level : & level ,
107
+ ReplaceAttr : func (groups []string , a slog.Attr ) slog.Attr {
108
+ switch a .Key {
109
+ case slog .TimeKey :
110
+ // Could be user-supplied "time".
111
+ if a .Value .Kind () == slog .KindTime {
112
+ return slog .Float64 ("ts" , float64 (a .Value .Time ().UnixMicro ())/ 1000 )
113
+ }
114
+ case slog .LevelKey :
115
+ level := a .Value .Any ().(slog.Level )
116
+ if level >= slog .LevelError {
117
+ // No verbosity on errors.
118
+ return slog.Attr {}
119
+ }
120
+ if level >= 0 {
121
+ return slog .Int ("v" , 0 )
122
+ }
123
+ return slog .Int ("v" , int (- level ))
124
+ case slog .SourceKey :
125
+ caller := zapcore.EntryCaller {
126
+ Defined : true ,
127
+ File : a .Value .String (),
128
+ }
129
+ return slog .String ("caller" , caller .TrimmedPath ())
130
+ }
131
+ return a
132
+ },
133
+ }))
134
+ }
135
+
96
136
b .ResetTimer ()
97
137
start := time .Now ()
98
138
total := int64 (0 )
0 commit comments