Skip to content

Commit 5148bdf

Browse files
committed
log4j-mdc-1.2
1 parent 51d562c commit 5148bdf

File tree

4 files changed

+55
-35
lines changed

4 files changed

+55
-35
lines changed

instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/CategoryInstrumentation.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) LoggingEvent event) {
46-
VirtualField.find(LoggingEvent.class, Context.class)
47-
.set(event, Java8BytecodeBridge.currentContext());
44+
VirtualFieldHelper.CONTEXT.set(event, Java8BytecodeBridge.currentContext());
4845
}
4946
}
5047
}

instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/Log4j1InstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
import com.google.auto.service.AutoService;
1212
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1313
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
14+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class Log4j1InstrumentationModule extends InstrumentationModule {
19+
public class Log4j1InstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public Log4j1InstrumentationModule() {
2022
super("log4j-mdc", "log4j-mdc-1.2");
2123
}
@@ -29,4 +31,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
2931
public List<TypeInstrumentation> typeInstrumentations() {
3032
return asList(new CategoryInstrumentation(), new LoggingEventInstrumentation());
3133
}
34+
35+
@Override
36+
public boolean isIndyReady() {
37+
return true;
38+
}
3239
}

instrumentation/log4j/log4j-mdc-1.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/log4j/mdc/v1_2/LoggingEventInstrumentation.java

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313

1414
import io.opentelemetry.api.trace.SpanContext;
1515
import io.opentelemetry.context.Context;
16-
import io.opentelemetry.instrumentation.api.util.VirtualField;
1716
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1817
import io.opentelemetry.javaagent.bootstrap.internal.AgentCommonConfig;
1918
import io.opentelemetry.javaagent.bootstrap.internal.ConfiguredResourceAttributesHolder;
2019
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2120
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
21+
import javax.annotation.Nullable;
2222
import net.bytebuddy.asm.Advice;
23+
import net.bytebuddy.asm.Advice.AssignReturned;
2324
import net.bytebuddy.description.type.TypeDescription;
2425
import net.bytebuddy.matcher.ElementMatcher;
2526
import org.apache.log4j.spi.LoggingEvent;
@@ -44,41 +45,38 @@ public void transform(TypeTransformer transformer) {
4445
@SuppressWarnings("unused")
4546
public static class GetMdcAdvice {
4647

48+
@AssignReturned.ToReturned
4749
@Advice.OnMethodExit(suppress = Throwable.class)
48-
public static void onExit(
50+
public static Object onExit(
4951
@Advice.This LoggingEvent event,
5052
@Advice.Argument(0) String key,
51-
@Advice.Return(readOnly = false) Object value) {
52-
if (AgentCommonConfig.get().getTraceIdKey().equals(key)
53-
|| AgentCommonConfig.get().getSpanIdKey().equals(key)
54-
|| AgentCommonConfig.get().getTraceFlagsKey().equals(key)) {
55-
if (value != null) {
56-
// Assume already instrumented event if traceId/spanId/sampled is present.
57-
return;
58-
}
53+
@Advice.Return @Nullable Object returnValue) {
5954

60-
Context context = VirtualField.find(LoggingEvent.class, Context.class).get(event);
61-
if (context == null) {
62-
return;
63-
}
64-
65-
SpanContext spanContext = Java8BytecodeBridge.spanFromContext(context).getSpanContext();
66-
if (!spanContext.isValid()) {
67-
return;
68-
}
55+
if (returnValue != null) {
56+
return returnValue;
57+
}
58+
boolean traceId = AgentCommonConfig.get().getTraceIdKey().equals(key);
59+
boolean spanId = AgentCommonConfig.get().getSpanIdKey().equals(key);
60+
boolean traceFlags = AgentCommonConfig.get().getTraceFlagsKey().equals(key);
6961

70-
if (AgentCommonConfig.get().getTraceIdKey().equals(key)) {
71-
value = spanContext.getTraceId();
72-
}
73-
if (AgentCommonConfig.get().getSpanIdKey().equals(key)) {
74-
value = spanContext.getSpanId();
75-
}
76-
if (AgentCommonConfig.get().getTraceFlagsKey().equals(key)) {
77-
value = spanContext.getTraceFlags().asHex();
78-
}
79-
} else if (value == null) {
80-
value = ConfiguredResourceAttributesHolder.getAttributeValue(key);
62+
if (!traceId && !spanId && !traceFlags) {
63+
return ConfiguredResourceAttributesHolder.getAttributeValue(key);
64+
}
65+
Context context = VirtualFieldHelper.CONTEXT.get(event);
66+
if (context == null) {
67+
return null;
68+
}
69+
SpanContext spanContext = Java8BytecodeBridge.spanFromContext(context).getSpanContext();
70+
if (!spanContext.isValid()) {
71+
return null;
72+
}
73+
if (traceId) {
74+
return spanContext.getTraceId();
75+
}
76+
if (spanId) {
77+
return spanContext.getSpanId();
8178
}
79+
return spanContext.getTraceFlags().asHex();
8280
}
8381
}
8482
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.log4j.mdc.v1_2;
7+
8+
import io.opentelemetry.context.Context;
9+
import io.opentelemetry.instrumentation.api.util.VirtualField;
10+
import org.apache.log4j.spi.LoggingEvent;
11+
12+
public class VirtualFieldHelper {
13+
14+
public static final VirtualField<LoggingEvent, Context> CONTEXT =
15+
VirtualField.find(LoggingEvent.class, Context.class);
16+
17+
private VirtualFieldHelper() {}
18+
}

0 commit comments

Comments
 (0)