diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java index 92b5c9631a..1b7729ad75 100644 --- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java +++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/ElasticApmTracer.java @@ -348,6 +348,12 @@ public Transaction currentTransaction() { return currentContext().getTransaction(); } + @Nullable + @Override + public co.elastic.apm.agent.tracer.ErrorCapture getActiveError() { + return ErrorCapture.getActive(); + } + /** * Starts a span with a given parent context. *
@@ -421,6 +427,12 @@ public ErrorCapture captureException(@Nullable Throwable e, ElasticContext> pa
return captureException(System.currentTimeMillis() * 1000, e, parentContext, initiatingClassLoader);
}
+ @Nullable
+ @Override
+ public ErrorCapture captureException(@Nullable Throwable e, @Nullable ClassLoader initiatingClassLoader) {
+ return captureException(System.currentTimeMillis() * 1000, e, currentContext(), initiatingClassLoader);
+ }
+
@Nullable
private ErrorCapture captureException(long epochMicros, @Nullable Throwable e, ElasticContext> parentContext, @Nullable ClassLoader initiatingClassLoader) {
if (!isRunning() || e == null) {
diff --git a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java
index 5f63869587..5be5431390 100644
--- a/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java
+++ b/apm-agent-core/src/main/java/co/elastic/apm/agent/impl/error/ErrorCapture.java
@@ -37,7 +37,7 @@
/**
* Data captured by an agent representing an event occurring in a monitored service
*/
-public class ErrorCapture implements Recyclable {
+public class ErrorCapture implements Recyclable, co.elastic.apm.agent.tracer.ErrorCapture {
private static final Logger logger = LoggerFactory.getLogger(ErrorCapture.class);
@@ -147,6 +147,7 @@ public ErrorCapture asChildOf(AbstractSpan> parent) {
return this;
}
+ @Override
public TraceContext getTraceContext() {
return traceContext;
}
@@ -199,11 +200,13 @@ private void setCulprit(StackTraceElement stackTraceElement) {
culprit.append(')');
}
+ @Override
public ErrorCapture activate() {
activeError.set(this);
return this;
}
+ @Override
public ErrorCapture deactivate() {
activeError.remove();
return this;
@@ -267,6 +270,7 @@ public void setTransactionType(@Nullable String type) {
transactionInfo.type = type;
}
+ @Override
public void end() {
tracer.endError(this);
}
diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java
index 7d7f1f179d..4afe5ef561 100644
--- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java
+++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/CaptureExceptionInstrumentation.java
@@ -18,8 +18,8 @@
*/
package co.elastic.apm.agent.pluginapi;
-import co.elastic.apm.agent.impl.Tracer;
import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils;
+import co.elastic.apm.agent.tracer.ErrorCapture;
import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription;
@@ -33,7 +33,10 @@ public class CaptureExceptionInstrumentation extends ApiInstrumentation {
public static class AdviceClass {
@Advice.OnMethodEnter(suppress = Throwable.class, inline = false)
public static void captureException(@Advice.Origin Class> clazz, @Advice.Argument(0) Throwable t) {
- tracer.require(Tracer.class).captureAndReportException(t, PrivilegedActionUtils.getClassLoader(clazz));
+ ErrorCapture errorCapture = tracer.captureException(t, PrivilegedActionUtils.getClassLoader(clazz));
+ if (errorCapture != null) {
+ errorCapture.end();
+ }
}
}
diff --git a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java
index 105d55a0c7..6be447f2f4 100644
--- a/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java
+++ b/apm-agent-plugins/apm-api-plugin/src/main/java/co/elastic/apm/agent/pluginapi/ElasticApmApiInstrumentation.java
@@ -21,6 +21,7 @@
import co.elastic.apm.agent.configuration.ServiceInfo;
import co.elastic.apm.agent.impl.ElasticApmTracer;
import co.elastic.apm.agent.impl.Tracer;
+import co.elastic.apm.agent.tracer.ErrorCapture;
import co.elastic.apm.agent.tracer.GlobalTracer;
import co.elastic.apm.agent.tracer.Transaction;
import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils;
@@ -149,7 +150,10 @@ public CaptureExceptionInstrumentation() {
public static class AdviceClass {
@Advice.OnMethodEnter(suppress = Throwable.class, inline = false)
public static void captureException(@Advice.Origin Class> clazz, @Advice.Argument(0) @Nullable Throwable e) {
- tracer.require(Tracer.class).captureAndReportException(e, PrivilegedActionUtils.getClassLoader(clazz));
+ ErrorCapture errorCapture = tracer.captureException(e, PrivilegedActionUtils.getClassLoader(clazz));
+ if (errorCapture != null) {
+ errorCapture.end();
+ }
}
}
}
diff --git a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java
index 65e4971f0c..0551af209a 100644
--- a/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java
+++ b/apm-agent-plugins/apm-logging-plugin/apm-log4j2-plugin/src/main/java/co/elastic/apm/agent/log4j2/correlation/Log4j2_7PlusLogCorrelationHelper.java
@@ -36,7 +36,7 @@ public class Log4j2_7PlusLogCorrelationHelper extends AbstractLogCorrelationHelp
@Override
protected boolean addToMdc() {
- if (tracer.currentTransaction() == null && ErrorCapture.getActive() == null) {
+ if (tracer.currentTransaction() == null && tracer.getActiveError() == null) {
return false;
}
ThreadContext.putAll(CorrelationIdMapAdapter.get());
diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java
index a939ca184f..09828a84d0 100644
--- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java
+++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/AbstractLogCorrelationHelper.java
@@ -19,8 +19,8 @@
package co.elastic.apm.agent.loginstr.correlation;
import co.elastic.apm.agent.tracer.AbstractSpan;
+import co.elastic.apm.agent.tracer.ErrorCapture;
import co.elastic.apm.agent.tracer.GlobalTracer;
-import co.elastic.apm.agent.impl.error.ErrorCapture;
import co.elastic.apm.agent.sdk.state.CallDepth;
import co.elastic.apm.agent.sdk.state.GlobalState;
import co.elastic.apm.agent.tracer.Tracer;
@@ -80,7 +80,7 @@ protected boolean addToMdc() {
addToMdc(TRANSACTION_ID_MDC_KEY, activeSpan.getTraceContext().getTransactionId().toString());
addedToMdc = true;
}
- ErrorCapture activeError = ErrorCapture.getActive();
+ ErrorCapture activeError = tracer.getActiveError();
if (activeError != null) {
addToMdc(ERROR_ID_MDC_KEY, activeError.getTraceContext().getId().toString());
addedToMdc = true;
diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java
index 7262590c8e..7548453060 100644
--- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java
+++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/correlation/CorrelationIdMapAdapter.java
@@ -19,8 +19,8 @@
package co.elastic.apm.agent.loginstr.correlation;
import co.elastic.apm.agent.tracer.AbstractSpan;
+import co.elastic.apm.agent.tracer.ErrorCapture;
import co.elastic.apm.agent.tracer.GlobalTracer;
-import co.elastic.apm.agent.impl.error.ErrorCapture;
import co.elastic.apm.agent.tracer.Tracer;
import javax.annotation.Nullable;
@@ -71,7 +71,7 @@ public String call() {
@Override
@Nullable
public String call() {
- ErrorCapture error = ErrorCapture.getActive();
+ ErrorCapture error = tracer.getActiveError();
if (error == null) {
return null;
}
diff --git a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java
index a534c19548..ce88c8b356 100644
--- a/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java
+++ b/apm-agent-plugins/apm-logging-plugin/apm-logging-plugin-common/src/main/java/co/elastic/apm/agent/loginstr/error/LoggerErrorHelper.java
@@ -18,7 +18,7 @@
*/
package co.elastic.apm.agent.loginstr.error;
-import co.elastic.apm.agent.impl.error.ErrorCapture;
+import co.elastic.apm.agent.tracer.ErrorCapture;
import co.elastic.apm.agent.sdk.internal.util.PrivilegedActionUtils;
import co.elastic.apm.agent.sdk.state.CallDepth;
import co.elastic.apm.agent.tracer.Tracer;
@@ -46,8 +46,7 @@ public LoggerErrorHelper(Class> adviceClass, Tracer tracer) {
public Object enter(@Nullable Throwable exception, Class> originClass) {
if (!callDepth.isNestedCallAndIncrement()) {
if (exception != null) {
- co.elastic.apm.agent.impl.Tracer required = tracer.require(co.elastic.apm.agent.impl.Tracer.class);
- ErrorCapture error = required.captureException(exception, required.currentContext(), PrivilegedActionUtils.getClassLoader(originClass));
+ ErrorCapture error = tracer.captureException(exception, PrivilegedActionUtils.getClassLoader(originClass));
if (error != null) {
error.activate();
}
diff --git a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/AbstractSpan.java b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/AbstractSpan.java
index 8e45b76c59..e164291c4d 100644
--- a/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/AbstractSpan.java
+++ b/apm-agent-tracer/src/main/java/co/elastic/apm/agent/tracer/AbstractSpan.java
@@ -23,7 +23,7 @@
import javax.annotation.Nullable;
-public interface AbstractSpan