@@ -19,6 +19,7 @@ package logs
19
19
import (
20
20
"bufio"
21
21
"bytes"
22
+ "flag"
22
23
"fmt"
23
24
"testing"
24
25
"time"
@@ -27,10 +28,12 @@ import (
27
28
28
29
"go.uber.org/zap"
29
30
"go.uber.org/zap/zapcore"
31
+
32
+ "k8s.io/klog/v2"
30
33
)
31
34
32
- // TestInfoLoggerInfo test infologger json info format
33
- func TestInfoLoggerInfo (t * testing.T ) {
35
+ // TestZapLoggerInfo test ZapLogger json info format
36
+ func TestZapLoggerInfo (t * testing.T ) {
34
37
timeNow = func () time.Time {
35
38
return time .Date (1970 , time .January , 1 , 0 , 0 , 0 , 123 , time .UTC )
36
39
}
@@ -41,30 +44,29 @@ func TestInfoLoggerInfo(t *testing.T) {
41
44
}{
42
45
{
43
46
msg : "test" ,
44
- format : "{\" v \" :1, \" ts\" :%f,\" msg\" :\" test\" ,\" ns\" :\" default\" ,\" podnum\" :2}\n " ,
47
+ format : "{\" ts\" :%f,\" msg\" :\" test\" , \" v \" :0 ,\" ns\" :\" default\" ,\" podnum\" :2}\n " ,
45
48
keysValues : []interface {}{"ns" , "default" , "podnum" , 2 },
46
49
},
47
50
{
48
51
msg : "test for strongly typed Zap field" ,
49
- format : "{\" v \" :3, \" ts\" :%f,\" msg\" :\" strongly-typed Zap Field passed to logr\" } \n { \ " v\" :1, \ " ts\" :0.000123,\" msg\" :\" test for strongly typed Zap field\" ,\" ns\" :\" default\" ,\" podnum\" :2}\n " ,
52
+ format : "{\" ts\" :%f,\" msg\" :\" strongly-typed Zap Field passed to logr\" , \ " v\" :0} \n { \ " ts\" :0.000123,\" msg\" :\" test for strongly typed Zap field\" , \" v \" :0 ,\" ns\" :\" default\" ,\" podnum\" :2}\n " ,
50
53
keysValues : []interface {}{"ns" , "default" , "podnum" , 2 , zap .Int ("attempt" , 3 ), "attempt" , "Running" , 10 },
51
54
},
52
55
{
53
56
msg : "test for non-string key argument" ,
54
- format : "{\" v \" :3, \" ts\" :%f,\" msg\" :\" non-string key argument passed to logging, ignoring all later arguments\" } \n { \ " v\" :1, \ " ts\" :0.000123,\" msg\" :\" test for non-string key argument\" ,\" ns\" :\" default\" ,\" podnum\" :2}\n " ,
57
+ format : "{\" ts\" :%f,\" msg\" :\" non-string key argument passed to logging, ignoring all later arguments\" , \ " v\" :0} \n { \ " ts\" :0.000123,\" msg\" :\" test for non-string key argument\" , \" v \" :0 ,\" ns\" :\" default\" ,\" podnum\" :2}\n " ,
55
58
keysValues : []interface {}{"ns" , "default" , "podnum" , 2 , 200 , "replica" , "Running" , 10 },
56
59
},
57
60
}
58
61
59
- for i , data := range testDataInfo {
62
+ for _ , data := range testDataInfo {
60
63
var buffer bytes.Buffer
61
64
writer := bufio .NewWriter (& buffer )
62
- var sampleInfoLogger = NewJSONLogger (zap . NewExample (), zapcore .AddSync (writer ))
65
+ var sampleInfoLogger = NewJSONLogger (zapcore .AddSync (writer ))
63
66
sampleInfoLogger .Info (data .msg , data .keysValues ... )
64
67
writer .Flush ()
65
68
logStr := buffer .String ()
66
69
var ts float64
67
- fmt .Println (i , logStr )
68
70
n , err := fmt .Sscanf (logStr , data .format , & ts )
69
71
if n != 1 || err != nil {
70
72
t .Errorf ("log format error: %d elements, error %s:\n %s" , n , err , logStr )
@@ -76,49 +78,60 @@ func TestInfoLoggerInfo(t *testing.T) {
76
78
}
77
79
}
78
80
79
- // TestInfoLoggerEnabled test jsonlogger should always enabled
80
- func TestInfoLoggerEnabled (t * testing.T ) {
81
- var sampleInfoLogger = NewJSONLogger (zap .NewExample (), nil )
82
- if ! sampleInfoLogger .Enabled () {
83
- t .Error ("info logger should always enabled" )
81
+ // TestZapLoggerEnabled test ZapLogger enabled
82
+ func TestZapLoggerEnabled (t * testing.T ) {
83
+ var sampleInfoLogger = NewJSONLogger (nil )
84
+ for i := 0 ; i < 11 ; i ++ {
85
+ if ! sampleInfoLogger .V (i ).Enabled () {
86
+ t .Errorf ("V(%d).Info should be enabled" , i )
87
+ }
84
88
}
85
89
}
86
90
87
- // TestInfoLoggerInfo test infologger V set log level func
91
+ // TestZapLoggerV test ZapLogger V set log level func
88
92
func TestZapLoggerV (t * testing.T ) {
89
- var buffer bytes.Buffer
90
- writer := bufio .NewWriter (& buffer )
91
93
timeNow = func () time.Time {
92
94
return time .Date (1970 , time .January , 1 , 0 , 0 , 0 , 123 , time .UTC )
93
95
}
94
- var sampleInfoLogger = NewJSONLogger (zap .NewExample (), zapcore .AddSync (writer ))
95
- sampleInfoLogger .V (2 ).Info ("test" , "ns" , "default" , "podnum" , 2 )
96
- writer .Flush ()
97
- logStr := buffer .String ()
98
- var ts float64
99
- expectFormat := `{"v":1,"ts":%f,"msg":"test","ns":"default","podnum":2}`
100
- n , err := fmt .Sscanf (logStr , expectFormat , & ts )
101
- if n != 0 || err == nil {
102
- t .Errorf ("log format error: %d elements, error %s:\n %s" , n , err , logStr )
103
- }
104
- if ! assert .Empty (t , logStr ) {
105
- t .Errorf ("Info log: %s should empty" , logStr )
96
+
97
+ for i := 0 ; i < 11 ; i ++ {
98
+ var buffer bytes.Buffer
99
+ writer := bufio .NewWriter (& buffer )
100
+ var sampleInfoLogger = NewJSONLogger (zapcore .AddSync (writer ))
101
+ sampleInfoLogger .V (i ).Info ("test" , "ns" , "default" , "podnum" , 2 )
102
+ writer .Flush ()
103
+ logStr := buffer .String ()
104
+ var v int
105
+ var expectFormat string
106
+ expectFormat = "{\" ts\" :0.000123,\" msg\" :\" test\" ,\" v\" :%d,\" ns\" :\" default\" ,\" podnum\" :2}\n "
107
+ n , err := fmt .Sscanf (logStr , expectFormat , & v )
108
+ if n != 1 || err != nil {
109
+ t .Errorf ("log format error: %d elements, error %s:\n %s" , n , err , logStr )
110
+ }
111
+ if v != i {
112
+ t .Errorf ("V(%d).Info...) returned v=%d. expected v=%d" , i , v , i )
113
+ }
114
+ expect := fmt .Sprintf (expectFormat , v )
115
+ if ! assert .Equal (t , logStr , expect ) {
116
+ t .Errorf ("V(%d).Info has wrong format \n expect:%s\n got:%s" , i , expect , logStr )
117
+ }
118
+ buffer .Reset ()
106
119
}
107
120
}
108
121
109
- // TestZapLoggerError test infologger json error format
122
+ // TestZapLoggerError test ZapLogger json error format
110
123
func TestZapLoggerError (t * testing.T ) {
111
124
var buffer bytes.Buffer
112
125
writer := bufio .NewWriter (& buffer )
113
126
timeNow = func () time.Time {
114
127
return time .Date (1970 , time .January , 1 , 0 , 0 , 0 , 123 , time .UTC )
115
128
}
116
- var sampleInfoLogger = NewJSONLogger (zap . NewExample (), zapcore .AddSync (writer ))
129
+ var sampleInfoLogger = NewJSONLogger (zapcore .AddSync (writer ))
117
130
sampleInfoLogger .Error (fmt .Errorf ("ivailid namespace:%s" , "default" ), "wrong namespace" , "ns" , "default" , "podnum" , 2 )
118
131
writer .Flush ()
119
132
logStr := buffer .String ()
120
133
var ts float64
121
- expectFormat := `{"v":2," ts":%f,"msg":"wrong namespace","ns":"default","podnum":2,"err":"ivailid namespace:default"}`
134
+ expectFormat := `{"ts":%f,"msg":"wrong namespace","v":0 ,"ns":"default","podnum":2,"err":"ivailid namespace:default"}`
122
135
n , err := fmt .Sscanf (logStr , expectFormat , & ts )
123
136
if n != 1 || err != nil {
124
137
t .Errorf ("log format error: %d elements, error %s:\n %s" , n , err , logStr )
@@ -128,3 +141,50 @@ func TestZapLoggerError(t *testing.T) {
128
141
t .Errorf ("Info has wrong format \n expect:%s\n got:%s" , expect , logStr )
129
142
}
130
143
}
144
+
145
+ // TestKlogV test klog -v(--verbose) func available with json logger
146
+ func TestKlogV (t * testing.T ) {
147
+ var buffer testBuff
148
+ logger := NewJSONLogger (& buffer )
149
+ klog .SetLogger (logger )
150
+ defer klog .SetLogger (nil )
151
+ fs := flag.FlagSet {}
152
+ klog .InitFlags (& fs )
153
+ totalLogsWritten := 0
154
+
155
+ defer fs .Set ("v" , "0" )
156
+
157
+ for i := 0 ; i < 11 ; i ++ {
158
+ err := fs .Set ("v" , fmt .Sprintf ("%d" , i ))
159
+ if err != nil {
160
+ t .Fatalf ("Failed to set verbosity" )
161
+ }
162
+ for j := 0 ; j < 11 ; j ++ {
163
+ klog .V (klog .Level (j )).Info ("test" )
164
+ logWritten := buffer .writeCount > 0
165
+ totalLogsWritten += buffer .writeCount
166
+ buffer .writeCount = 0
167
+ if logWritten == (i < j ) {
168
+ t .Errorf ("klog.V(%d).Info(...) wrote log when -v=%d" , j , i )
169
+ }
170
+ }
171
+ }
172
+ if totalLogsWritten != 66 {
173
+ t .Fatalf ("Unexpected number of logs written, got %d, expected 66" , totalLogsWritten )
174
+ }
175
+ }
176
+
177
+ type testBuff struct {
178
+ writeCount int
179
+ }
180
+
181
+ // Sync syncs data to file
182
+ func (b * testBuff ) Sync () error {
183
+ return nil
184
+ }
185
+
186
+ // Write writes data to buffer
187
+ func (b * testBuff ) Write (p []byte ) (int , error ) {
188
+ b .writeCount ++
189
+ return len (p ), nil
190
+ }
0 commit comments