@@ -91,8 +91,6 @@ import (
91
91
"sync/atomic"
92
92
"time"
93
93
94
- "github.com/go-logr/logr"
95
-
96
94
"k8s.io/klog/v2/internal/buffer"
97
95
"k8s.io/klog/v2/internal/clock"
98
96
"k8s.io/klog/v2/internal/dbg"
@@ -453,7 +451,7 @@ type settings struct {
453
451
454
452
// logger is the global Logger chosen by users of klog, nil if
455
453
// none is available.
456
- logger * Logger
454
+ logger * logWriter
457
455
458
456
// loggerOptions contains the options that were supplied for
459
457
// globalLogger.
@@ -525,6 +523,11 @@ func (s settings) deepCopy() settings {
525
523
}
526
524
s .vmodule .filter = filter
527
525
526
+ if s .logger != nil {
527
+ logger := * s .logger
528
+ s .logger = & logger
529
+ }
530
+
528
531
return s
529
532
}
530
533
@@ -668,15 +671,16 @@ func (l *loggingT) formatHeader(s severity.Severity, file string, line int) *buf
668
671
return buf
669
672
}
670
673
671
- func (l * loggingT ) println (s severity.Severity , logger * logr. Logger , filter LogFilter , args ... interface {}) {
674
+ func (l * loggingT ) println (s severity.Severity , logger * logWriter , filter LogFilter , args ... interface {}) {
672
675
l .printlnDepth (s , logger , filter , 1 , args ... )
673
676
}
674
677
675
- func (l * loggingT ) printlnDepth (s severity.Severity , logger * logr. Logger , filter LogFilter , depth int , args ... interface {}) {
678
+ func (l * loggingT ) printlnDepth (s severity.Severity , logger * logWriter , filter LogFilter , depth int , args ... interface {}) {
676
679
buf , file , line := l .header (s , depth )
677
- // if logger is set, we clear the generated header as we rely on the backing
678
- // logger implementation to print headers
679
- if logger != nil {
680
+ // If a logger is set and doesn't support writing a formatted buffer,
681
+ // we clear the generated header as we rely on the backing
682
+ // logger implementation to print headers.
683
+ if logger != nil && logger .writeKlogBuffer == nil {
680
684
buffer .PutBuffer (buf )
681
685
buf = buffer .GetBuffer ()
682
686
}
@@ -687,15 +691,16 @@ func (l *loggingT) printlnDepth(s severity.Severity, logger *logr.Logger, filter
687
691
l .output (s , logger , buf , depth , file , line , false )
688
692
}
689
693
690
- func (l * loggingT ) print (s severity.Severity , logger * logr. Logger , filter LogFilter , args ... interface {}) {
694
+ func (l * loggingT ) print (s severity.Severity , logger * logWriter , filter LogFilter , args ... interface {}) {
691
695
l .printDepth (s , logger , filter , 1 , args ... )
692
696
}
693
697
694
- func (l * loggingT ) printDepth (s severity.Severity , logger * logr. Logger , filter LogFilter , depth int , args ... interface {}) {
698
+ func (l * loggingT ) printDepth (s severity.Severity , logger * logWriter , filter LogFilter , depth int , args ... interface {}) {
695
699
buf , file , line := l .header (s , depth )
696
- // if logr is set, we clear the generated header as we rely on the backing
697
- // logr implementation to print headers
698
- if logger != nil {
700
+ // If a logger is set and doesn't support writing a formatted buffer,
701
+ // we clear the generated header as we rely on the backing
702
+ // logger implementation to print headers.
703
+ if logger != nil && logger .writeKlogBuffer == nil {
699
704
buffer .PutBuffer (buf )
700
705
buf = buffer .GetBuffer ()
701
706
}
@@ -709,15 +714,16 @@ func (l *loggingT) printDepth(s severity.Severity, logger *logr.Logger, filter L
709
714
l .output (s , logger , buf , depth , file , line , false )
710
715
}
711
716
712
- func (l * loggingT ) printf (s severity.Severity , logger * logr. Logger , filter LogFilter , format string , args ... interface {}) {
717
+ func (l * loggingT ) printf (s severity.Severity , logger * logWriter , filter LogFilter , format string , args ... interface {}) {
713
718
l .printfDepth (s , logger , filter , 1 , format , args ... )
714
719
}
715
720
716
- func (l * loggingT ) printfDepth (s severity.Severity , logger * logr. Logger , filter LogFilter , depth int , format string , args ... interface {}) {
721
+ func (l * loggingT ) printfDepth (s severity.Severity , logger * logWriter , filter LogFilter , depth int , format string , args ... interface {}) {
717
722
buf , file , line := l .header (s , depth )
718
- // if logr is set, we clear the generated header as we rely on the backing
719
- // logr implementation to print headers
720
- if logger != nil {
723
+ // If a logger is set and doesn't support writing a formatted buffer,
724
+ // we clear the generated header as we rely on the backing
725
+ // logger implementation to print headers.
726
+ if logger != nil && logger .writeKlogBuffer == nil {
721
727
buffer .PutBuffer (buf )
722
728
buf = buffer .GetBuffer ()
723
729
}
@@ -734,11 +740,12 @@ func (l *loggingT) printfDepth(s severity.Severity, logger *logr.Logger, filter
734
740
// printWithFileLine behaves like print but uses the provided file and line number. If
735
741
// alsoLogToStderr is true, the log message always appears on standard error; it
736
742
// will also appear in the log file unless --logtostderr is set.
737
- func (l * loggingT ) printWithFileLine (s severity.Severity , logger * logr. Logger , filter LogFilter , file string , line int , alsoToStderr bool , args ... interface {}) {
743
+ func (l * loggingT ) printWithFileLine (s severity.Severity , logger * logWriter , filter LogFilter , file string , line int , alsoToStderr bool , args ... interface {}) {
738
744
buf := l .formatHeader (s , file , line )
739
- // if logr is set, we clear the generated header as we rely on the backing
740
- // logr implementation to print headers
741
- if logger != nil {
745
+ // If a logger is set and doesn't support writing a formatted buffer,
746
+ // we clear the generated header as we rely on the backing
747
+ // logger implementation to print headers.
748
+ if logger != nil && logger .writeKlogBuffer == nil {
742
749
buffer .PutBuffer (buf )
743
750
buf = buffer .GetBuffer ()
744
751
}
@@ -753,7 +760,7 @@ func (l *loggingT) printWithFileLine(s severity.Severity, logger *logr.Logger, f
753
760
}
754
761
755
762
// if loggr is specified, will call loggr.Error, otherwise output with logging module.
756
- func (l * loggingT ) errorS (err error , logger * logr. Logger , filter LogFilter , depth int , msg string , keysAndValues ... interface {}) {
763
+ func (l * loggingT ) errorS (err error , logger * logWriter , filter LogFilter , depth int , msg string , keysAndValues ... interface {}) {
757
764
if filter != nil {
758
765
msg , keysAndValues = filter .FilterS (msg , keysAndValues )
759
766
}
@@ -765,7 +772,7 @@ func (l *loggingT) errorS(err error, logger *logr.Logger, filter LogFilter, dept
765
772
}
766
773
767
774
// if loggr is specified, will call loggr.Info, otherwise output with logging module.
768
- func (l * loggingT ) infoS (logger * logr. Logger , filter LogFilter , depth int , msg string , keysAndValues ... interface {}) {
775
+ func (l * loggingT ) infoS (logger * logWriter , filter LogFilter , depth int , msg string , keysAndValues ... interface {}) {
769
776
if filter != nil {
770
777
msg , keysAndValues = filter .FilterS (msg , keysAndValues )
771
778
}
@@ -846,7 +853,7 @@ func LogToStderr(stderr bool) {
846
853
}
847
854
848
855
// output writes the data to the log files and releases the buffer.
849
- func (l * loggingT ) output (s severity.Severity , log * logr. Logger , buf * buffer.Buffer , depth int , file string , line int , alsoToStderr bool ) {
856
+ func (l * loggingT ) output (s severity.Severity , logger * logWriter , buf * buffer.Buffer , depth int , file string , line int , alsoToStderr bool ) {
850
857
var isLocked = true
851
858
l .mu .Lock ()
852
859
defer func () {
@@ -862,13 +869,17 @@ func (l *loggingT) output(s severity.Severity, log *logr.Logger, buf *buffer.Buf
862
869
}
863
870
}
864
871
data := buf .Bytes ()
865
- if log != nil {
866
- // TODO: set 'severity' and caller information as structured log info
867
- // keysAndValues := []interface{}{"severity", severityName[s], "file", file, "line", line}
868
- if s == severity .ErrorLog {
869
- logging .logger .WithCallDepth (depth + 3 ).Error (nil , string (data ))
872
+ if logger != nil {
873
+ if logger .writeKlogBuffer != nil {
874
+ logger .writeKlogBuffer (data )
870
875
} else {
871
- log .WithCallDepth (depth + 3 ).Info (string (data ))
876
+ // TODO: set 'severity' and caller information as structured log info
877
+ // keysAndValues := []interface{}{"severity", severityName[s], "file", file, "line", line}
878
+ if s == severity .ErrorLog {
879
+ logger .WithCallDepth (depth + 3 ).Error (nil , string (data ))
880
+ } else {
881
+ logger .WithCallDepth (depth + 3 ).Info (string (data ))
882
+ }
872
883
}
873
884
} else if l .toStderr {
874
885
os .Stderr .Write (data )
@@ -1277,15 +1288,15 @@ func (l *loggingT) setV(pc uintptr) Level {
1277
1288
// See the documentation of V for more information.
1278
1289
type Verbose struct {
1279
1290
enabled bool
1280
- logr * logr. Logger
1291
+ logger * logWriter
1281
1292
}
1282
1293
1283
1294
func newVerbose (level Level , b bool ) Verbose {
1284
1295
if logging .logger == nil {
1285
1296
return Verbose {b , nil }
1286
1297
}
1287
1298
v := logging .logger .V (int (level ))
1288
- return Verbose {b , & v }
1299
+ return Verbose {b , & logWriter { Logger : v , writeKlogBuffer : logging . loggerOptions . writeKlogBuffer } }
1289
1300
}
1290
1301
1291
1302
// V reports whether verbosity at the call site is at least the requested level.
@@ -1359,55 +1370,55 @@ func (v Verbose) Enabled() bool {
1359
1370
// See the documentation of V for usage.
1360
1371
func (v Verbose ) Info (args ... interface {}) {
1361
1372
if v .enabled {
1362
- logging .print (severity .InfoLog , v .logr , logging .filter , args ... )
1373
+ logging .print (severity .InfoLog , v .logger , logging .filter , args ... )
1363
1374
}
1364
1375
}
1365
1376
1366
1377
// InfoDepth is equivalent to the global InfoDepth function, guarded by the value of v.
1367
1378
// See the documentation of V for usage.
1368
1379
func (v Verbose ) InfoDepth (depth int , args ... interface {}) {
1369
1380
if v .enabled {
1370
- logging .printDepth (severity .InfoLog , v .logr , logging .filter , depth , args ... )
1381
+ logging .printDepth (severity .InfoLog , v .logger , logging .filter , depth , args ... )
1371
1382
}
1372
1383
}
1373
1384
1374
1385
// Infoln is equivalent to the global Infoln function, guarded by the value of v.
1375
1386
// See the documentation of V for usage.
1376
1387
func (v Verbose ) Infoln (args ... interface {}) {
1377
1388
if v .enabled {
1378
- logging .println (severity .InfoLog , v .logr , logging .filter , args ... )
1389
+ logging .println (severity .InfoLog , v .logger , logging .filter , args ... )
1379
1390
}
1380
1391
}
1381
1392
1382
1393
// InfolnDepth is equivalent to the global InfolnDepth function, guarded by the value of v.
1383
1394
// See the documentation of V for usage.
1384
1395
func (v Verbose ) InfolnDepth (depth int , args ... interface {}) {
1385
1396
if v .enabled {
1386
- logging .printlnDepth (severity .InfoLog , v .logr , logging .filter , depth , args ... )
1397
+ logging .printlnDepth (severity .InfoLog , v .logger , logging .filter , depth , args ... )
1387
1398
}
1388
1399
}
1389
1400
1390
1401
// Infof is equivalent to the global Infof function, guarded by the value of v.
1391
1402
// See the documentation of V for usage.
1392
1403
func (v Verbose ) Infof (format string , args ... interface {}) {
1393
1404
if v .enabled {
1394
- logging .printf (severity .InfoLog , v .logr , logging .filter , format , args ... )
1405
+ logging .printf (severity .InfoLog , v .logger , logging .filter , format , args ... )
1395
1406
}
1396
1407
}
1397
1408
1398
1409
// InfofDepth is equivalent to the global InfofDepth function, guarded by the value of v.
1399
1410
// See the documentation of V for usage.
1400
1411
func (v Verbose ) InfofDepth (depth int , format string , args ... interface {}) {
1401
1412
if v .enabled {
1402
- logging .printfDepth (severity .InfoLog , v .logr , logging .filter , depth , format , args ... )
1413
+ logging .printfDepth (severity .InfoLog , v .logger , logging .filter , depth , format , args ... )
1403
1414
}
1404
1415
}
1405
1416
1406
1417
// InfoS is equivalent to the global InfoS function, guarded by the value of v.
1407
1418
// See the documentation of V for usage.
1408
1419
func (v Verbose ) InfoS (msg string , keysAndValues ... interface {}) {
1409
1420
if v .enabled {
1410
- logging .infoS (v .logr , logging .filter , 0 , msg , keysAndValues ... )
1421
+ logging .infoS (v .logger , logging .filter , 0 , msg , keysAndValues ... )
1411
1422
}
1412
1423
}
1413
1424
@@ -1421,22 +1432,22 @@ func InfoSDepth(depth int, msg string, keysAndValues ...interface{}) {
1421
1432
// See the documentation of V for usage.
1422
1433
func (v Verbose ) InfoSDepth (depth int , msg string , keysAndValues ... interface {}) {
1423
1434
if v .enabled {
1424
- logging .infoS (v .logr , logging .filter , depth , msg , keysAndValues ... )
1435
+ logging .infoS (v .logger , logging .filter , depth , msg , keysAndValues ... )
1425
1436
}
1426
1437
}
1427
1438
1428
1439
// Deprecated: Use ErrorS instead.
1429
1440
func (v Verbose ) Error (err error , msg string , args ... interface {}) {
1430
1441
if v .enabled {
1431
- logging .errorS (err , v .logr , logging .filter , 0 , msg , args ... )
1442
+ logging .errorS (err , v .logger , logging .filter , 0 , msg , args ... )
1432
1443
}
1433
1444
}
1434
1445
1435
1446
// ErrorS is equivalent to the global Error function, guarded by the value of v.
1436
1447
// See the documentation of V for usage.
1437
1448
func (v Verbose ) ErrorS (err error , msg string , keysAndValues ... interface {}) {
1438
1449
if v .enabled {
1439
- logging .errorS (err , v .logr , logging .filter , 0 , msg , keysAndValues ... )
1450
+ logging .errorS (err , v .logger , logging .filter , 0 , msg , keysAndValues ... )
1440
1451
}
1441
1452
}
1442
1453
0 commit comments