Skip to content

Commit 76ab49f

Browse files
author
Mike Davis
authored
fix(logger): Use exportable field names in log output (#246)
1 parent 530f579 commit 76ab49f

File tree

2 files changed

+36
-32
lines changed

2 files changed

+36
-32
lines changed

pkg/logging/logger.go

+18-13
Original file line numberDiff line numberDiff line change
@@ -73,37 +73,42 @@ func SetLogLevel(logLevel LogLevel) {
7373

7474
// GetLogger returns a log producer with the given name
7575
func GetLogger(sdkKey, name string) OptimizelyLogProducer {
76+
77+
fields := map[string]interface{}{
78+
"instance": GetSdkKeyLogMapping(sdkKey),
79+
"name": name,
80+
}
81+
82+
if shouldIncludeSDKKey {
83+
fields["sdkKey"] = sdkKey
84+
}
85+
7686
return NamedLogProducer{
77-
fields: map[string]interface{}{"aSdkKeyLogMapping":GetSdkKeyLogMapping(sdkKey), "name": name},
87+
fields: fields,
7888
}
7989
}
8090

8191
// GetSdkKeyLogMapping returns a string that maps to the sdk key that is used for logging (hiding the sdk key)
8292
func GetSdkKeyLogMapping(sdkKey string) string {
8393
if logMapping, _ := sdkKeyMappings.Load(sdkKey); logMapping != nil {
84-
if lm, ok := logMapping.(string);ok {
94+
if lm, ok := logMapping.(string); ok {
8595
return lm
8696
}
8797
} else if sdkKey != "" {
88-
mapping := "optimizely-" + strconv.Itoa(int(atomic.AddInt32(&count, 1)))
98+
mapping := "Instance-" + strconv.Itoa(int(atomic.AddInt32(&count, 1)))
8999
sdkKeyMappings.Store(sdkKey, mapping)
90100
return mapping
91101
}
92102

93103
return ""
94104
}
95105

96-
// UseSdkKeyForLogging by default the sdk key is masked for logging.
97-
// This sets it to use the SDK Key and should be set before the creating your client factory.
98-
func UseSdkKeyForLogging(sdkKey string) {
99-
SetSdkKeyLogMapping(sdkKey, sdkKey)
100-
}
106+
// Default to NOT include the SDK in log fields
107+
var shouldIncludeSDKKey = false
101108

102-
// SetSdkKeyLogMapping sets the logging key to use for the Optimizely sdk key.
103-
// By default, the sdk key has masking. This can override the default of optimizely-1,2,3,4,etc..
104-
// This should be set before creating your Optimizely client factory.
105-
func SetSdkKeyLogMapping(sdkKey, logMapping string) {
106-
sdkKeyMappings.Store(sdkKey, logMapping)
109+
// IncludeSDKKeyInLogFields to set whether or not the SDK key is included in the logging output.
110+
func IncludeSDKKeyInLogFields(include bool) {
111+
shouldIncludeSDKKey = include
107112
}
108113

109114
// NamedLogProducer produces logs prefixed with its name

pkg/logging/logger_test.go

+18-19
Original file line numberDiff line numberDiff line change
@@ -103,57 +103,56 @@ func TestNamedLoggerFields(t *testing.T) {
103103

104104
SetLogger(newLogger)
105105

106-
logger := GetLogger("TestNamedLoggerFields-sdkKey", "TestNamedLoggerFields")
106+
sdkKey := "TestNamedLoggerFields-sdkKey"
107+
logger := GetLogger(sdkKey, "TestNamedLoggerFields")
107108
logger.Debug("test message")
108109

109-
key := GetSdkKeyLogMapping("TestNamedLoggerFields-sdkKey")
110110
assert.Contains(t, out.String(), "test message")
111111
assert.Contains(t, out.String(), "[Debug]")
112112
assert.Contains(t, out.String(), "[TestNamedLoggerFields]")
113-
assert.Contains(t, out.String(), key)
113+
assert.Contains(t, out.String(), GetSdkKeyLogMapping(sdkKey))
114114
assert.NotContains(t, out.String(), "TestNamedLoggerFields-sdkKey")
115115
assert.Contains(t, out.String(), "[Optimizely]")
116116

117117
}
118118

119-
func TestLogSdkKeyOverride(t *testing.T) {
119+
func TestLogSdkKey(t *testing.T) {
120120
out := &bytes.Buffer{}
121121
newLogger := NewFilteredLevelLogConsumer(LogLevelDebug, out)
122122

123123
SetLogger(newLogger)
124124

125-
key := "test-test-test"
126-
SetSdkKeyLogMapping("TestLogOverride-sdkKey", key)
127-
128-
logger := GetLogger("TestLogOverride-sdkKey", "TestLogSdkKeyOverride")
125+
sdkKey := "TestLogSdkKey-sdkKey"
126+
logger := GetLogger(sdkKey, "TestLogSdkKeyOverride")
129127
logger.Debug("test message")
130128

131129
assert.Contains(t, out.String(), "test message")
132130
assert.Contains(t, out.String(), "[Debug]")
133131
assert.Contains(t, out.String(), "[TestLogSdkKeyOverride]")
134-
assert.Contains(t, out.String(), key)
135-
assert.NotContains(t, out.String(), "TestNamedLoggerFields-sdkKey")
132+
assert.Contains(t, out.String(), GetSdkKeyLogMapping(sdkKey))
136133
assert.Contains(t, out.String(), "[Optimizely]")
134+
assert.NotContains(t, out.String(), sdkKey)
137135
}
138136

139-
func TestLogSdkKey(t *testing.T) {
137+
func TestLogWithSdkKey(t *testing.T) {
140138
out := &bytes.Buffer{}
141139
newLogger := NewFilteredLevelLogConsumer(LogLevelDebug, out)
142140

143141
SetLogger(newLogger)
144142

145-
key := "TestLogSdkKey-sdkKey"
146-
147-
UseSdkKeyForLogging(key)
148-
149-
logger := GetLogger(key, "TestLogSdkKeyOverride")
143+
IncludeSDKKeyInLogFields(true)
144+
sdkKey := "TestLogSdkKey-sdkKey"
145+
logger := GetLogger(sdkKey, "TestLogSdkKeyOverride")
150146
logger.Debug("test message")
151147

152148
assert.Contains(t, out.String(), "test message")
153149
assert.Contains(t, out.String(), "[Debug]")
154150
assert.Contains(t, out.String(), "[TestLogSdkKeyOverride]")
155-
assert.Contains(t, out.String(), key)
151+
assert.Contains(t, out.String(), GetSdkKeyLogMapping(sdkKey))
156152
assert.Contains(t, out.String(), "[Optimizely]")
153+
assert.Contains(t, out.String(), sdkKey)
154+
155+
IncludeSDKKeyInLogFields(false)
157156
}
158157

159158
func TestLoggingOrder(t *testing.T) {
@@ -172,7 +171,7 @@ func TestLoggingOrder(t *testing.T) {
172171
response := out.String()
173172

174173
assert.Contains(t, response, "test message")
175-
assert.Contains(t, response, "[Debug][" + key +"][TestLoggingOrder] test message" )
174+
assert.Contains(t, response, "[Debug]["+key+"][TestLoggingOrder] test message")
176175
assert.True(t, strings.HasPrefix(response, "[Optimizely]"))
177176

178177
}
@@ -193,7 +192,7 @@ func TestLoggingOrderEmpty(t *testing.T) {
193192
response := out.String()
194193

195194
assert.Contains(t, response, "test message")
196-
assert.Contains(t, response, "[Debug][TestLoggingOrder] test message" )
195+
assert.Contains(t, response, "[Debug][TestLoggingOrder] test message")
197196
assert.True(t, strings.HasPrefix(response, "[Optimizely]"))
198197

199198
}

0 commit comments

Comments
 (0)