Skip to content

Commit 531c756

Browse files
feat: add newzaplogger and rework logptest (#335)
* feat: add newzaplogger and rework logptest properly use zaptest logger instead of rewrapping the zap core this should make full use of zaptest logger and only log if a test fails * Update logger.go * Update logger.go * Update mapstr_test.go * refactor: add test helper for observer logs * Update mapstr_test.go * Update logger.go * Update logp/logger.go Co-authored-by: Khushi Jain <[email protected]> * Update logp/logptest/logptest.go Co-authored-by: Khushi Jain <[email protected]> --------- Co-authored-by: Khushi Jain <[email protected]>
1 parent 714a3cd commit 531c756

File tree

4 files changed

+29
-20
lines changed

4 files changed

+29
-20
lines changed

logp/logger.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ func NewDevelopmentLogger(selector string, options ...LogOption) (*Logger, error
8888
return &Logger{logger, logger.Sugar(), make(map[string]struct{})}, nil
8989
}
9090

91+
// NewZapLogger returns a logger based on the provided zap logger
92+
func NewZapLogger(logger *zap.Logger) (*Logger, error) {
93+
return &Logger{logger, logger.Sugar(), make(map[string]struct{})}, nil
94+
}
95+
9196
// NewInMemory returns a new in-memory logger along with the buffer to which it
9297
// logs. It's goroutine safe, but operating directly on the returned buffer is not.
9398
// This logger is primary intended for short and simple use-cases such as printing

logp/logptest/logptest.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,27 @@ import (
2424
"go.uber.org/zap"
2525
"go.uber.org/zap/zapcore"
2626
"go.uber.org/zap/zaptest"
27+
"go.uber.org/zap/zaptest/observer"
2728
)
2829

2930
// NewTestingLogger returns a testing suitable logp.Logger.
3031
func NewTestingLogger(t testing.TB, selector string, options ...logp.LogOption) *logp.Logger {
31-
log := zaptest.NewLogger(t)
32+
log := zaptest.NewLogger(t, zaptest.WrapOptions(options...))
3233
log = log.Named(selector)
33-
wrapCore := zap.WrapCore(func(zapcore.Core) zapcore.Core {
34-
return log.Core()
35-
})
36-
options = append([]logp.LogOption{wrapCore}, options...)
37-
logger, err := logp.NewDevelopmentLogger(selector, options...)
34+
35+
logger, err := logp.NewZapLogger(log)
3836
if err != nil {
3937
t.Fatal(err)
4038
}
4139
return logger
4240
}
41+
42+
// NewTestingLoggerWithObserver returns a testing suitable logp.Logger and an observer
43+
func NewTestingLoggerWithObserver(t testing.TB, selector string) (*logp.Logger, *observer.ObservedLogs) {
44+
observedCore, observedLogs := observer.New(zapcore.DebugLevel)
45+
logger := NewTestingLogger(t, selector, zap.WrapCore(func(core zapcore.Core) zapcore.Core {
46+
return observedCore
47+
}))
48+
49+
return logger, observedLogs
50+
}

mapstr/mapstr_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"go.uber.org/zap/zapcore"
3030

3131
"github.com/elastic/elastic-agent-libs/logp"
32+
"github.com/elastic/elastic-agent-libs/logp/logptest"
3233
)
3334

3435
func TestMapStrUpdate(t *testing.T) {
@@ -382,7 +383,7 @@ func incrementMapstrValues(m M) {
382383
case int:
383384
m[k] = v + 1
384385
case M:
385-
incrementMapstrValues(m[k].(M))
386+
incrementMapstrValues(v)
386387
case []M:
387388
for _, c := range v {
388389
incrementMapstrValues(c)
@@ -956,9 +957,6 @@ func BenchmarkMapStrFlatten(b *testing.B) {
956957

957958
// Ensure the MapStr is marshaled in logs the same way it is by json.Marshal.
958959
func TestMapStrJSONLog(t *testing.T) {
959-
err := logp.DevelopmentSetup(logp.ToObserverOutput())
960-
require.Nil(t, err)
961-
962960
m := M{
963961
"test": 15,
964962
"hello": M{
@@ -977,8 +975,10 @@ func TestMapStrJSONLog(t *testing.T) {
977975
}
978976
expectedJSON := string(data)
979977

980-
logp.NewLogger("test").Infow("msg", "m", m)
981-
logs := logp.ObserverLogs().TakeAll()
978+
logger, observedLogs := logptest.NewTestingLoggerWithObserver(t, "test")
979+
980+
logger.Infow("msg", "m", m)
981+
logs := observedLogs.TakeAll()
982982
if assert.Len(t, logs, 1) {
983983
log := logs[0]
984984

transport/logging_test.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,20 @@ import (
2525
"testing"
2626
"time"
2727

28-
"github.com/elastic/elastic-agent-libs/logp"
2928
"github.com/stretchr/testify/assert"
3029
"github.com/stretchr/testify/require"
30+
31+
"github.com/elastic/elastic-agent-libs/logp/logptest"
3132
)
3233

3334
func TestCloseConnectionError(t *testing.T) {
34-
// observe all logs
35-
if err := logp.DevelopmentSetup(logp.ToObserverOutput()); err != nil {
36-
t.Fatalf("cannot initialise logger on development mode: %+v", err)
37-
}
38-
3935
// Set up a test HTTP server
4036
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
4137
fmt.Fprintln(w, `{"status": "ok"}`)
4238
}))
4339
defer server.Close()
4440

45-
logger := logp.NewLogger("test")
41+
logger, observedLogs := logptest.NewTestingLoggerWithObserver(t, "test")
4642
// Set IdleConnTimeout to 2 seconds and a custom dialer
4743
transport := &http.Transport{
4844
IdleConnTimeout: 2 * time.Second,
@@ -70,7 +66,7 @@ func TestCloseConnectionError(t *testing.T) {
7066
_, _ = io.ReadAll(resp.Body)
7167
resp.Body.Close()
7268

73-
logs := logp.ObserverLogs().FilterMessageSnippet("Error reading from connection:").TakeAll()
69+
logs := observedLogs.FilterMessageSnippet("Error reading from connection:").TakeAll()
7470
assert.Equal(t, 0, len(logs), "did not ignore use of closed connection error")
7571

7672
}

0 commit comments

Comments
 (0)