Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions logp/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@ func NewDevelopmentLogger(selector string, options ...LogOption) (*Logger, error
return &Logger{logger, logger.Sugar(), make(map[string]struct{})}, nil
}

// NewNopLogger returns a logger based on the provided zap logger
func NewZapLogger(logger *zap.Logger) (*Logger, error) {
return &Logger{logger, logger.Sugar(), make(map[string]struct{})}, nil
}

// NewInMemory returns a new in-memory logger along with the buffer to which it
// logs. It's goroutine safe, but operating directly on the returned buffer is not.
// This logger is primary intended for short and simple use-cases such as printing
Expand Down
20 changes: 14 additions & 6 deletions logp/logptest/logptest.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,19 +24,27 @@ import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"go.uber.org/zap/zaptest"
"go.uber.org/zap/zaptest/observer"
)

// NewTestingLogger returns a testing suitable logp.Logger.
func NewTestingLogger(t testing.TB, selector string, options ...logp.LogOption) *logp.Logger {
log := zaptest.NewLogger(t)
log := zaptest.NewLogger(t, zaptest.WrapOptions(options...))
log = log.Named(selector)
wrapCore := zap.WrapCore(func(zapcore.Core) zapcore.Core {
return log.Core()
})
options = append([]logp.LogOption{wrapCore}, options...)
logger, err := logp.NewDevelopmentLogger(selector, options...)

logger, err := logp.NewZapLogger(log)
if err != nil {
t.Fatal(err)
}
return logger
}

// NewTestingLogger returns a testing suitable logp.Logger.
func NewTestingLoggerWithObserver(t testing.TB, selector string) (*logp.Logger, *observer.ObservedLogs) {
observedCore, observedLogs := observer.New(zapcore.DebugLevel)
logger := NewTestingLogger(t, selector, zap.WrapCore(func(core zapcore.Core) zapcore.Core {
return observedCore
}))

return logger, observedLogs
}
12 changes: 6 additions & 6 deletions mapstr/mapstr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"go.uber.org/zap/zapcore"

"github.com/elastic/elastic-agent-libs/logp"
"github.com/elastic/elastic-agent-libs/logp/logptest"
)

func TestMapStrUpdate(t *testing.T) {
Expand Down Expand Up @@ -382,7 +383,7 @@
case int:
m[k] = v + 1
case M:
incrementMapstrValues(m[k].(M))
incrementMapstrValues(v)
case []M:
for _, c := range v {
incrementMapstrValues(c)
Expand Down Expand Up @@ -956,9 +957,6 @@

// Ensure the MapStr is marshaled in logs the same way it is by json.Marshal.
func TestMapStrJSONLog(t *testing.T) {
err := logp.DevelopmentSetup(logp.ToObserverOutput())
require.Nil(t, err)

m := M{
"test": 15,
"hello": M{
Expand All @@ -977,8 +975,10 @@
}
expectedJSON := string(data)

logp.NewLogger("test").Infow("msg", "m", m)
logs := logp.ObserverLogs().TakeAll()
logger, observedLogs := logptest.NewTestingLoggerWithObserver(t, "test")

logger.Infow("msg", "m", m)
logs := observedLogs.TakeAll()
if assert.Len(t, logs, 1) {
log := logs[0]

Expand All @@ -997,7 +997,7 @@
}

func BenchmarkMapStrLogging(b *testing.B) {
err := logp.DevelopmentSetup(logp.ToDiscardOutput())

Check failure on line 1000 in mapstr/mapstr_test.go

View workflow job for this annotation

GitHub Actions / lint (macos-latest)

SA1019: logp.DevelopmentSetup is deprecated: Prefer using localized loggers. Use logp.NewDevelopmentLogger. (staticcheck)
require.Nil(b, err)
logger := logp.NewLogger("benchtest")

Expand Down
12 changes: 4 additions & 8 deletions transport/logging_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,20 @@ import (
"testing"
"time"

"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/elastic/elastic-agent-libs/logp/logptest"
)

func TestCloseConnectionError(t *testing.T) {
// observe all logs
if err := logp.DevelopmentSetup(logp.ToObserverOutput()); err != nil {
t.Fatalf("cannot initialise logger on development mode: %+v", err)
}

// Set up a test HTTP server
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, `{"status": "ok"}`)
}))
defer server.Close()

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

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

}
Loading