Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
}

// NewZapLogger 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
}

// NewTestingLoggerWithObserver returns a testing suitable logp.Logger and an observer
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)

Check failure on line 1000 in mapstr/mapstr_test.go

View workflow job for this annotation

GitHub Actions / lint (ubuntu-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