@@ -21,8 +21,10 @@ import (
21
21
"sync"
22
22
23
23
"github.com/go-logr/logr"
24
+ nsmlog "github.com/networkservicemesh/sdk/pkg/tools/log"
24
25
)
25
26
27
+
26
28
// Several different logr backends can be tested by remove/add comment
27
29
// below.
28
30
@@ -38,7 +40,6 @@ func init() {
38
40
defaultLogger = newLogger("").WithName("Meridio")
39
41
}
40
42
*/
41
-
42
43
/*
43
44
// Zerologr doesn't implement logger.Enabled() correctly
44
45
import (
@@ -65,10 +66,12 @@ func newLogger(level string) logr.Logger {
65
66
return zerologr.New(&zl)
66
67
}
67
68
func init() {
68
- defaultLogger = newLogger("").WithName("Meridio")
69
+ Logger = newLogger("").WithName("Meridio")
70
+ }
71
+ func NSMLogger(logger logr.Logger) nsmlog.Logger {
72
+ return nil
69
73
}
70
74
*/
71
-
72
75
/*
73
76
import (
74
77
"fmt"
@@ -97,10 +100,12 @@ func newLogger(level string) logr.Logger {
97
100
98
101
}
99
102
func init() {
100
- defaultLogger = newLogger("").WithName("Meridio")
103
+ Logger = newLogger("").WithName("Meridio")
104
+ }
105
+ func NSMLogger(logger logr.Logger) nsmlog.Logger {
106
+ return nil
101
107
}
102
108
*/
103
-
104
109
/*
105
110
import (
106
111
"github.com/bombsimon/logrusr/v3"
@@ -123,7 +128,10 @@ func newLogger(level string) logr.Logger {
123
128
return logrusr.New(logrusLog)
124
129
}
125
130
func init() {
126
- defaultLogger = newLogger("").WithName("Meridio")
131
+ Logger = newLogger("").WithName("Meridio")
132
+ }
133
+ func NSMLogger(logger logr.Logger) nsmlog.Logger {
134
+ return nil
127
135
}
128
136
*/
129
137
@@ -136,7 +144,6 @@ import (
136
144
"go.uber.org/zap"
137
145
"go.uber.org/zap/buffer"
138
146
"go.uber.org/zap/zapcore"
139
- nsmlog "github.com/networkservicemesh/sdk/pkg/tools/log"
140
147
)
141
148
142
149
func timeEncoder (t time.Time , enc zapcore.PrimitiveArrayEncoder ) {
@@ -311,45 +318,30 @@ func init() {
311
318
Logger = newLogger ("" ).WithName ("Meridio" )
312
319
}
313
320
321
+ // ZapLogger returns the underlying zap.Logger.
322
+ // NOTE; this breaks the use of different log implementations!
323
+ func ZapLogger (logger logr.Logger ) * zap.Logger {
324
+ if underlier , ok := logger .GetSink ().(zapr.Underlier ); ok {
325
+ return underlier .GetUnderlying ()
326
+ } else {
327
+ return nil
328
+ }
329
+ }
330
+
314
331
// Fatal log the message using the passed logger and terminate
315
332
func Fatal (logger logr.Logger , msg string , keysAndValues ... interface {}) {
316
- // Get the zap logger
317
- if underlier , ok := logger .GetSink ().(zapr.Underlier ); ok {
318
- z := underlier .GetUnderlying ()
333
+ if z := ZapLogger (logger ); z != nil {
319
334
z .Sugar ().Fatalw (msg , keysAndValues ... )
320
335
} else {
321
336
// Fallback to go default
322
337
golog .Fatal (msg , keysAndValues )
323
338
}
324
339
}
325
340
326
- // The global logger
327
- var Logger logr.Logger
328
-
329
- // FromContextOrDefault return a logger from the passed context or a
330
- // default logger. This function is intended as a temprary solution
331
- // during the transition to structured logging.
332
- func FromContextOrDefault (ctx context.Context ) logr.Logger {
333
- if logger , err := logr .FromContext (ctx ); err == nil {
334
- return logger
335
- }
336
- return Logger
337
- }
338
-
339
- // New returns a new logger. The level may be "DEBUG" (V(1)) or "TRACE" (V(2)),
340
- // any other string (e.g. "") is interpreted as "INFO" (V(0)).
341
- func New (name , level string ) logr.Logger {
342
- logger := newLogger (level ).WithName (name )
343
- once .Do (func () {Logger = logger })
344
- return logger
345
- }
346
- var once sync.Once
347
-
348
-
349
341
// NSMLogger return a logger to use for NSM logging.
350
- func NSMLogger (baseLogger logr.Logger ) nsmlog.Logger {
342
+ func NSMLogger (logger logr.Logger ) nsmlog.Logger {
351
343
// Get the zap logger
352
- if underlier , ok := baseLogger .GetSink ().(zapr.Underlier ); ok {
344
+ if underlier , ok := logger .GetSink ().(zapr.Underlier ); ok {
353
345
z := underlier .GetUnderlying ()
354
346
return & nsmLogger { z : z , s : z .Sugar () }
355
347
} else {
@@ -408,3 +400,27 @@ func (l *nsmLogger) WithField(key, value interface{}) nsmlog.Logger {
408
400
z : l .z .With (zap .Any (fmt .Sprintf ("%v" , key ), value )),
409
401
}
410
402
}
403
+
404
+
405
+ // The global logger
406
+ var Logger logr.Logger
407
+
408
+ // FromContextOrGlobal return a logger from the passed context or the
409
+ // global logger.
410
+ func FromContextOrDefault (ctx context.Context ) logr.Logger {
411
+ if logger , err := logr .FromContext (ctx ); err == nil {
412
+ return logger
413
+ }
414
+ return Logger
415
+ }
416
+
417
+ // New returns a new logger. The level may be "DEBUG" (V(1)) or "TRACE" (V(2)),
418
+ // any other string (e.g. "") is interpreted as "INFO" (V(0)). On first call
419
+ // the global Logger is set.
420
+ func New (name , level string ) logr.Logger {
421
+ logger := newLogger (level ).WithName (name )
422
+ once .Do (func () {Logger = logger })
423
+ return logger
424
+ }
425
+ var once sync.Once
426
+
0 commit comments