Skip to content

Commit 6697148

Browse files
author
Lars Ekman
committed
Ensure that different log implementations work
1 parent 90a7703 commit 6697148

File tree

2 files changed

+55
-37
lines changed

2 files changed

+55
-37
lines changed

pkg/log/logger.go

+51-35
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ import (
2121
"sync"
2222

2323
"github.com/go-logr/logr"
24+
nsmlog "github.com/networkservicemesh/sdk/pkg/tools/log"
2425
)
2526

27+
2628
// Several different logr backends can be tested by remove/add comment
2729
// below.
2830

@@ -38,7 +40,6 @@ func init() {
3840
defaultLogger = newLogger("").WithName("Meridio")
3941
}
4042
*/
41-
4243
/*
4344
// Zerologr doesn't implement logger.Enabled() correctly
4445
import (
@@ -65,10 +66,12 @@ func newLogger(level string) logr.Logger {
6566
return zerologr.New(&zl)
6667
}
6768
func init() {
68-
defaultLogger = newLogger("").WithName("Meridio")
69+
Logger = newLogger("").WithName("Meridio")
70+
}
71+
func NSMLogger(logger logr.Logger) nsmlog.Logger {
72+
return nil
6973
}
7074
*/
71-
7275
/*
7376
import (
7477
"fmt"
@@ -97,10 +100,12 @@ func newLogger(level string) logr.Logger {
97100
98101
}
99102
func init() {
100-
defaultLogger = newLogger("").WithName("Meridio")
103+
Logger = newLogger("").WithName("Meridio")
104+
}
105+
func NSMLogger(logger logr.Logger) nsmlog.Logger {
106+
return nil
101107
}
102108
*/
103-
104109
/*
105110
import (
106111
"github.com/bombsimon/logrusr/v3"
@@ -123,7 +128,10 @@ func newLogger(level string) logr.Logger {
123128
return logrusr.New(logrusLog)
124129
}
125130
func init() {
126-
defaultLogger = newLogger("").WithName("Meridio")
131+
Logger = newLogger("").WithName("Meridio")
132+
}
133+
func NSMLogger(logger logr.Logger) nsmlog.Logger {
134+
return nil
127135
}
128136
*/
129137

@@ -136,7 +144,6 @@ import (
136144
"go.uber.org/zap"
137145
"go.uber.org/zap/buffer"
138146
"go.uber.org/zap/zapcore"
139-
nsmlog "github.com/networkservicemesh/sdk/pkg/tools/log"
140147
)
141148

142149
func timeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
@@ -311,45 +318,30 @@ func init() {
311318
Logger = newLogger("").WithName("Meridio")
312319
}
313320

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+
314331
// Fatal log the message using the passed logger and terminate
315332
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 {
319334
z.Sugar().Fatalw(msg, keysAndValues...)
320335
} else {
321336
// Fallback to go default
322337
golog.Fatal(msg, keysAndValues)
323338
}
324339
}
325340

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-
349341
// 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 {
351343
// Get the zap logger
352-
if underlier, ok := baseLogger.GetSink().(zapr.Underlier); ok {
344+
if underlier, ok := logger.GetSink().(zapr.Underlier); ok {
353345
z := underlier.GetUnderlying()
354346
return &nsmLogger{ z: z, s: z.Sugar() }
355347
} else {
@@ -408,3 +400,27 @@ func (l *nsmLogger) WithField(key, value interface{}) nsmlog.Logger {
408400
z: l.z.With(zap.Any(fmt.Sprintf("%v", key), value)),
409401
}
410402
}
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+

pkg/log/logger_test.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ func TestLogger(t *testing.T) {
4848
//log.Fatal(logger, "Can't read crucial data", "error", fmt.Errorf("Not found"))
4949

5050
nsmlogger := log.NSMLogger(log.New("NSMLogger-info", ""))
51-
nsmlogger.Info("one", "two", "three")
52-
nsmlogger.Infof("%v, %v, %v", "one", "two", "three")
51+
if nsmlogger != nil {
52+
nsmlogger.Info("one", "two", "three")
53+
nsmlogger.Infof("%v, %v, %v", "one", "two", "three")
54+
}
5355
}

0 commit comments

Comments
 (0)