Skip to content

Commit 55d6ae4

Browse files
SylvainJugelaurit
andauthored
make jboss-logmanager indy-ready (#15116)
Co-authored-by: Lauri Tulmin <[email protected]> Co-authored-by: Lauri Tulmin <[email protected]>
1 parent d56ec91 commit 55d6ae4

File tree

6 files changed

+92
-54
lines changed

6 files changed

+92
-54
lines changed

instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/JbossLogmanagerInstrumentation.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,19 @@ public void transform(TypeTransformer transformer) {
4141
@SuppressWarnings("unused")
4242
public static class CallLogRawAdvice {
4343
@Advice.OnMethodEnter(suppress = Throwable.class)
44-
public static void methodEnter(
45-
@Advice.This Logger logger,
46-
@Advice.Argument(0) ExtLogRecord record,
47-
@Advice.Local("otelCallDepth") CallDepth callDepth) {
44+
public static CallDepth methodEnter(
45+
@Advice.This Logger logger, @Advice.Argument(0) ExtLogRecord record) {
4846
// need to track call depth across all loggers in order to avoid double capture when one
4947
// logging framework delegates to another
50-
callDepth = CallDepth.forClass(LoggerProvider.class);
48+
CallDepth callDepth = CallDepth.forClass(LoggerProvider.class);
5149
if (callDepth.getAndIncrement() == 0) {
5250
LoggingEventMapper.INSTANCE.capture(logger, record);
5351
}
52+
return callDepth;
5453
}
5554

5655
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
57-
public static void methodExit(@Advice.Local("otelCallDepth") CallDepth callDepth) {
56+
public static void methodExit(@Advice.Enter CallDepth callDepth) {
5857
callDepth.decrementAndGet();
5958
}
6059
}

instrumentation/jboss-logmanager/jboss-logmanager-appender-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/appender/v1_1/JbossLogmanagerInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class JbossLogmanagerInstrumentationModule extends InstrumentationModule {
17+
public class JbossLogmanagerInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719

1820
public JbossLogmanagerInstrumentationModule() {
1921
super("jboss-logmanager-appender", "jboss-logmanager-appender-1.1");
@@ -23,4 +25,9 @@ public JbossLogmanagerInstrumentationModule() {
2325
public List<TypeInstrumentation> typeInstrumentations() {
2426
return singletonList(new JbossLogmanagerInstrumentation());
2527
}
28+
29+
@Override
30+
public boolean isIndyReady() {
31+
return true;
32+
}
2633
}

instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossExtLogRecordInstrumentation.java

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,13 @@
1212
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1313

1414
import io.opentelemetry.api.trace.SpanContext;
15-
import io.opentelemetry.context.Context;
16-
import io.opentelemetry.instrumentation.api.util.VirtualField;
17-
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1815
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
1916
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2017
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2118
import java.util.Map;
19+
import javax.annotation.Nullable;
2220
import net.bytebuddy.asm.Advice;
21+
import net.bytebuddy.asm.Advice.AssignReturned;
2322
import net.bytebuddy.description.type.TypeDescription;
2423
import net.bytebuddy.matcher.ElementMatcher;
2524
import org.jboss.logmanager.ExtLogRecord;
@@ -50,63 +49,59 @@ public void transform(TypeTransformer transformer) {
5049
@SuppressWarnings("unused")
5150
public static class GetMdcAdvice {
5251

52+
@Nullable
53+
@AssignReturned.ToReturned
5354
@Advice.OnMethodExit(suppress = Throwable.class)
54-
public static void onExit(
55+
public static String onExit(
5556
@Advice.This ExtLogRecord record,
5657
@Advice.Argument(0) String key,
57-
@Advice.Return(readOnly = false) String value) {
58-
if (AgentCommonConfig.get().getTraceIdKey().equals(key)
59-
|| AgentCommonConfig.get().getSpanIdKey().equals(key)
60-
|| AgentCommonConfig.get().getTraceFlagsKey().equals(key)) {
61-
if (value != null) {
62-
// Assume already instrumented event if traceId/spanId/sampled is present.
63-
return;
64-
}
65-
66-
Context context = VirtualField.find(ExtLogRecord.class, Context.class).get(record);
67-
if (context == null) {
68-
return;
69-
}
70-
SpanContext spanContext = Java8BytecodeBridge.spanFromContext(context).getSpanContext();
71-
if (!spanContext.isValid()) {
72-
return;
73-
}
74-
75-
if (AgentCommonConfig.get().getTraceIdKey().equals(key)) {
76-
value = spanContext.getTraceId();
77-
}
78-
if (AgentCommonConfig.get().getSpanIdKey().equals(key)) {
79-
value = spanContext.getSpanId();
80-
}
81-
if (AgentCommonConfig.get().getTraceFlagsKey().equals(key)) {
82-
value = spanContext.getTraceFlags().asHex();
83-
}
58+
@Advice.Return @Nullable String value) {
59+
60+
boolean traceId = AgentCommonConfig.get().getTraceIdKey().equals(key);
61+
boolean spanId = AgentCommonConfig.get().getSpanIdKey().equals(key);
62+
boolean traceFlags = AgentCommonConfig.get().getTraceFlagsKey().equals(key);
63+
64+
if (!traceId && !spanId && !traceFlags) {
65+
return value;
66+
}
67+
if (value != null) {
68+
// Assume already instrumented event if traceId/spanId/sampled is present.
69+
return value;
70+
}
71+
72+
SpanContext spanContext = JbossLogManagerHelper.getSpanContext(record);
73+
if (!spanContext.isValid()) {
74+
return value;
8475
}
76+
77+
if (traceId) {
78+
return spanContext.getTraceId();
79+
}
80+
if (spanId) {
81+
return spanContext.getSpanId();
82+
}
83+
// traceFlags == true
84+
return spanContext.getTraceFlags().asHex();
8585
}
8686
}
8787

8888
@SuppressWarnings("unused")
8989
public static class GetMdcCopyAdvice {
9090

91+
@AssignReturned.ToReturned
9192
@Advice.OnMethodExit(suppress = Throwable.class)
92-
public static void onExit(
93-
@Advice.This ExtLogRecord record,
94-
@Advice.Return(readOnly = false) Map<String, String> value) {
93+
public static Map<String, String> onExit(
94+
@Advice.This ExtLogRecord record, @Advice.Return Map<String, String> value) {
9595

9696
if (value.containsKey(AgentCommonConfig.get().getTraceIdKey())
9797
&& value.containsKey(AgentCommonConfig.get().getSpanIdKey())
9898
&& value.containsKey(AgentCommonConfig.get().getTraceFlagsKey())) {
99-
return;
100-
}
101-
102-
Context context = VirtualField.find(ExtLogRecord.class, Context.class).get(record);
103-
if (context == null) {
104-
return;
99+
return value;
105100
}
106101

107-
SpanContext spanContext = Java8BytecodeBridge.spanFromContext(context).getSpanContext();
102+
SpanContext spanContext = JbossLogManagerHelper.getSpanContext(record);
108103
if (!spanContext.isValid()) {
109-
return;
104+
return value;
110105
}
111106

112107
if (!value.containsKey(AgentCommonConfig.get().getTraceIdKey())) {
@@ -120,6 +115,7 @@ public static void onExit(
120115
if (!value.containsKey(AgentCommonConfig.get().getTraceFlagsKey())) {
121116
value.put(AgentCommonConfig.get().getTraceFlagsKey(), spanContext.getTraceFlags().asHex());
122117
}
118+
return value;
123119
}
124120
}
125121
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.jbosslogmanager.mdc.v1_1;
7+
8+
import io.opentelemetry.api.trace.Span;
9+
import io.opentelemetry.api.trace.SpanContext;
10+
import io.opentelemetry.context.Context;
11+
import io.opentelemetry.instrumentation.api.util.VirtualField;
12+
import org.jboss.logmanager.ExtLogRecord;
13+
14+
public class JbossLogManagerHelper {
15+
16+
private static final VirtualField<ExtLogRecord, Context> CONTEXT =
17+
VirtualField.find(ExtLogRecord.class, Context.class);
18+
19+
public static SpanContext getSpanContext(ExtLogRecord record) {
20+
Context context = CONTEXT.get(record);
21+
if (context == null) {
22+
return SpanContext.getInvalid();
23+
}
24+
return Span.fromContext(context).getSpanContext();
25+
}
26+
27+
public static void setSpanContext(ExtLogRecord record, Context context) {
28+
CONTEXT.set(record, context);
29+
}
30+
31+
private JbossLogManagerHelper() {}
32+
}

instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossLoggerInstrumentation.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1212
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1313

14-
import io.opentelemetry.context.Context;
15-
import io.opentelemetry.instrumentation.api.util.VirtualField;
1614
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1715
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1816
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -43,8 +41,7 @@ public static class CallAppendersAdvice {
4341

4442
@Advice.OnMethodEnter(suppress = Throwable.class)
4543
public static void onEnter(@Advice.Argument(0) ExtLogRecord record) {
46-
VirtualField.find(ExtLogRecord.class, Context.class)
47-
.set(record, Java8BytecodeBridge.currentContext());
44+
JbossLogManagerHelper.setSpanContext(record, Java8BytecodeBridge.currentContext());
4845
}
4946
}
5047
}

instrumentation/jboss-logmanager/jboss-logmanager-mdc-1.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jbosslogmanager/mdc/v1_1/JbossLogmanagerInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class JbossLogmanagerInstrumentationModule extends InstrumentationModule {
17+
public class JbossLogmanagerInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719

1820
public JbossLogmanagerInstrumentationModule() {
1921
super("jboss-logmanager-mdc", "jboss-logmanager-mdc-1.1");
@@ -23,4 +25,9 @@ public JbossLogmanagerInstrumentationModule() {
2325
public List<TypeInstrumentation> typeInstrumentations() {
2426
return asList(new JbossLoggerInstrumentation(), new JbossExtLogRecordInstrumentation());
2527
}
28+
29+
@Override
30+
public boolean isIndyReady() {
31+
return true;
32+
}
2633
}

0 commit comments

Comments
 (0)