diff --git a/logp/logger.go b/logp/logger.go index b98c81b0..02f312ba 100644 --- a/logp/logger.go +++ b/logp/logger.go @@ -322,7 +322,7 @@ func (l *Logger) DPanicw(msg string, keysAndValues ...interface{}) { func (l *Logger) Recover(msg string) { if r := recover(); r != nil { msg := fmt.Sprintf("%s. Recovering, but please report this.", msg) - l.Error(msg, zap.Any("panic", r), zap.Stack("stack")) + l.WithOptions(zap.AddCallerSkip(1)).Error(msg, zap.Any("panic", r), zap.Stack("stack")) } } diff --git a/monitoring/adapter/go-metrics.go b/monitoring/adapter/go-metrics.go index 2f91ff67..83dfa6f4 100644 --- a/monitoring/adapter/go-metrics.go +++ b/monitoring/adapter/go-metrics.go @@ -58,23 +58,23 @@ type GoMetricsRegistry struct { // // it's recommended to have the underlying registry being generated with // `monitoring.IgnorePublishExpvar`. -func GetGoMetrics(parent *monitoring.Registry, name string, filters ...MetricFilter) *GoMetricsRegistry { +func GetGoMetrics(parent *monitoring.Registry, name string, logger *logp.Logger, filters ...MetricFilter) *GoMetricsRegistry { v := parent.Get(name) if v == nil { - return NewGoMetrics(parent, name, filters...) + return NewGoMetrics(parent, name, logger, filters...) } - return newGoMetrics(v.(*monitoring.Registry), filters...) //nolint:errcheck //code depends on panic + return newGoMetrics(v.(*monitoring.Registry), logger, filters...) //nolint:errcheck //code depends on panic } // NewGoMetrics creates and registers a new GoMetricsRegistry with the parent // registry. -func NewGoMetrics(parent *monitoring.Registry, name string, filters ...MetricFilter) *GoMetricsRegistry { - return newGoMetrics(parent.NewRegistry(name, monitoring.IgnorePublishExpvar), filters...) +func NewGoMetrics(parent *monitoring.Registry, name string, logger *logp.Logger, filters ...MetricFilter) *GoMetricsRegistry { + return newGoMetrics(parent.NewRegistry(name, monitoring.IgnorePublishExpvar), logger, filters...) } -func newGoMetrics(reg *monitoring.Registry, filters ...MetricFilter) *GoMetricsRegistry { +func newGoMetrics(reg *monitoring.Registry, logger *logp.Logger, filters ...MetricFilter) *GoMetricsRegistry { return &GoMetricsRegistry{ - log: logp.NewLogger("monitoring"), + log: logger.Named("monitoring"), reg: reg, shadow: metrics.NewRegistry(), filters: makeFilters(filters...), diff --git a/monitoring/adapter/go-metrics_test.go b/monitoring/adapter/go-metrics_test.go index c2492237..cee6e6ce 100644 --- a/monitoring/adapter/go-metrics_test.go +++ b/monitoring/adapter/go-metrics_test.go @@ -25,6 +25,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/elastic/elastic-agent-libs/logp" "github.com/elastic/elastic-agent-libs/monitoring" ) @@ -53,7 +54,7 @@ func TestGoMetricsAdapter(t *testing.T) { } monReg := monitoring.NewRegistry() - var reg metrics.Registry = GetGoMetrics(monReg, "test", filters...) + var reg metrics.Registry = GetGoMetrics(monReg, "test", logp.NewNopLogger(), filters...) // register some metrics and check they're satisfying the go-metrics interface // no matter if owned by monitoring or go-metrics @@ -116,8 +117,8 @@ func TestGoMetricsHistogramClearOnVisit(t *testing.T) { monReg := monitoring.NewRegistry() histogramSample := metrics.NewUniformSample(10) clearedHistogramSample := metrics.NewUniformSample(10) - _ = NewGoMetrics(monReg, "original", Accept).Register("histogram", metrics.NewHistogram(histogramSample)) - _ = NewGoMetrics(monReg, "cleared", Accept).Register("histogram", NewClearOnVisitHistogram(clearedHistogramSample)) + _ = NewGoMetrics(monReg, "original", logp.NewNopLogger(), Accept).Register("histogram", metrics.NewHistogram(histogramSample)) + _ = NewGoMetrics(monReg, "cleared", logp.NewNopLogger(), Accept).Register("histogram", NewClearOnVisitHistogram(clearedHistogramSample)) dataPoints := [...]int{2, 4, 8, 4, 2} dataPointsMedian := 4.0 for _, i := range dataPoints {