Skip to content

Commit 514d745

Browse files
authored
Enhancement - Initialise logger once and re-use (#3645)
1 parent 40b318a commit 514d745

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

pkg/csi/service/logger/logger.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"sync"
78

89
"github.com/google/uuid"
910
"go.uber.org/zap"
@@ -26,7 +27,11 @@ const (
2627
LogCtxIDKey = "TraceId"
2728
)
2829

29-
var defaultLogLevel LogLevel
30+
var (
31+
defaultLogLevel LogLevel
32+
logger *zap.Logger
33+
loggerMutex sync.Mutex
34+
)
3035

3136
// loggerKey holds the context key used for loggers.
3237
type loggerKey struct{}
@@ -76,9 +81,22 @@ func withFields(ctx context.Context, fields ...zapcore.Field) context.Context {
7681
return context.WithValue(ctx, loggerKey{}, getLogger(ctx).With(fields...))
7782
}
7883

79-
// newLogger creates and return a new logger depending logLevel set.
84+
// newLogger creates and returns a logger according to the logLevel set.
85+
// Uses singleton pattern to create only one instance of logger.
8086
func newLogger() *zap.Logger {
81-
var logger *zap.Logger
87+
if logger != nil {
88+
// logger is already initialized
89+
return logger
90+
}
91+
92+
loggerMutex.Lock()
93+
defer loggerMutex.Unlock()
94+
// this check ensures that multiple threads don't override the logger
95+
// created by the first thread acquiring the lock.
96+
if logger != nil {
97+
return logger
98+
}
99+
82100
if defaultLogLevel == DevelopmentLogLevel {
83101
logger, _ = zap.NewDevelopment()
84102
} else {
@@ -87,6 +105,7 @@ func newLogger() *zap.Logger {
87105
loggerConfig.EncoderConfig.EncodeTime = zapcore.RFC3339NanoTimeEncoder
88106
logger, _ = loggerConfig.Build()
89107
}
108+
90109
return logger
91110
}
92111

pkg/csi/service/wcp/controller_helper_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@ import (
1313
k8stesting "k8s.io/client-go/testing"
1414
"sigs.k8s.io/vsphere-csi-driver/v3/pkg/common/unittestcommon"
1515
"sigs.k8s.io/vsphere-csi-driver/v3/pkg/csi/service/common/commonco"
16-
"sigs.k8s.io/vsphere-csi-driver/v3/pkg/csi/service/logger"
1716
)
1817

1918
func TestGetPodVMUUID(t *testing.T) {
20-
logger.SetLoggerLevel(logger.DevelopmentLogLevel)
2119
containerOrchOriginal := commonco.ContainerOrchestratorUtility
2220
commonco.ContainerOrchestratorUtility = &unittestcommon.FakeK8SOrchestrator{}
2321
newK8sClientOriginal := newK8sClient

0 commit comments

Comments
 (0)