Skip to content

Commit 0074383

Browse files
committed
Fix logback appender on android
1 parent b1f72b6 commit 0074383

File tree

1 file changed

+14
-9
lines changed
  • instrumentation/logback/logback-appender-1.0/library/src/main/java/io/opentelemetry/instrumentation/logback/appender/v1_0/internal

1 file changed

+14
-9
lines changed

instrumentation/logback/logback-appender-1.0/library/src/main/java/io/opentelemetry/instrumentation/logback/appender/v1_0/internal/LoggingEventMapper.java

+14-9
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,6 @@ public final class LoggingEventMapper {
7070
private static final AttributeKey<List<String>> LOG_BODY_PARAMETERS =
7171
AttributeKey.stringArrayKey("log.body.parameters");
7272

73-
private static final ClassValue<FieldReader> valueField =
74-
new ClassValue<FieldReader>() {
75-
@Override
76-
protected FieldReader computeValue(Class<?> type) {
77-
return createFieldReader(type);
78-
}
79-
};
80-
8173
private final boolean captureExperimentalAttributes;
8274
private final List<String> captureMdcAttributes;
8375
private final boolean captureAllMdcAttributes;
@@ -496,7 +488,7 @@ private static void captureLogstashMarker(AttributesBuilder attributes, Marker m
496488

497489
private static void captureLogstashMarkerAttributes(
498490
AttributesBuilder attributes, Object logstashMarker) {
499-
FieldReader fieldReader = valueField.get(logstashMarker.getClass());
491+
FieldReader fieldReader = LogstashFieldReaderHolder.valueField.get(logstashMarker.getClass());
500492
if (fieldReader != null) {
501493
fieldReader.read(attributes, logstashMarker);
502494
}
@@ -591,6 +583,8 @@ private static boolean supportsLogstashMarkers() {
591583
Class.forName("net.logstash.logback.marker.LogstashMarker");
592584
Class.forName("net.logstash.logback.marker.SingleFieldAppendingMarker");
593585
Class.forName("net.logstash.logback.marker.MapEntriesAppendingMarker");
586+
// missing in some android versions, used for capturing logstash attributes
587+
Class.forName("java.lang.ClassValue");
594588
} catch (ClassNotFoundException e) {
595589
return false;
596590
}
@@ -602,6 +596,17 @@ private interface FieldReader {
602596
void read(AttributesBuilder attributes, Object logstashMarker);
603597
}
604598

599+
private static class LogstashFieldReaderHolder {
600+
// keeping this field in a separate class because ClassValue is missing in some android versions
601+
static final ClassValue<FieldReader> valueField =
602+
new ClassValue<FieldReader>() {
603+
@Override
604+
protected FieldReader computeValue(Class<?> type) {
605+
return createFieldReader(type);
606+
}
607+
};
608+
}
609+
605610
/**
606611
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
607612
* any time.

0 commit comments

Comments
 (0)