Skip to content

Commit cc49d40

Browse files
committed
More explicit fix
1 parent 00b0c4f commit cc49d40

4 files changed

Lines changed: 203 additions & 194 deletions

File tree

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/classicsdk/ApplicationInsightsAppenderClassFileTransformer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public class ApplicationInsightsAppenderClassFileTransformer implements ClassFil
2727
UnshadedSdkPackageName.get() + "/log4j/v2/ApplicationInsightsAppender";
2828
private static final String UNSHADED_CLASS_NAME_LOG_4_JV_1_2 =
2929
UnshadedSdkPackageName.get() + "/log4j/v1_2/ApplicationInsightsAppender";
30+
private static final String UNSHADED_CLASS_NAME_LOGBACK_LOGGING_EVENT =
31+
UnshadedSdkPackageName.getLogbackPrefix() + "logback/classic/spi/ILoggingEvent";
3032

3133
@Override
3234
@Nullable
@@ -72,10 +74,10 @@ public MethodVisitor visitMethod(
7274
@Nullable String signature,
7375
@Nullable String[] exceptions) {
7476
MethodVisitor mv = cw.visitMethod(access, name, descriptor, signature, exceptions);
75-
// match append(SomeLoggingEvent): the descriptor type-strings are not checked here
76-
// because Shadow relocates the "ch/qos/logback" literal, breaking the match at runtime;
77-
// class-name filtering in transform() already guarantees we are in the right class
78-
if (name.equals("append") && descriptor.startsWith("(L") && descriptor.endsWith(";)V")) {
77+
if (name.equals("append")
78+
&& (descriptor.equals("(L" + UNSHADED_CLASS_NAME_LOGBACK_LOGGING_EVENT + ";)V")
79+
|| descriptor.equals("(Lorg/apache/log4j/spi/LoggingEvent;)V")
80+
|| descriptor.equals("(Lorg/apache/logging/log4j/core/LogEvent;)V"))) {
7981
// no-op the append() method
8082
mv.visitCode();
8183
mv.visitInsn(RETURN);

agent/agent-tooling/src/main/java/com/microsoft/applicationinsights/agent/internal/classicsdk/UnshadedSdkPackageName.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,23 @@
55

66
public class UnshadedSdkPackageName {
77

8-
// using constant here so that it will NOT get shaded
9-
// IMPORTANT FOR THIS NOT TO BE FINAL (or private)
10-
// OTHERWISE COMPILER COULD THEORETICALLY INLINE IT BELOW AND APPLY .substring(1)
11-
// and then it WOULD be shaded
8+
// using package-prefix constants here so that they will NOT get shaded
9+
// IMPORTANT FOR THESE NOT TO BE FINAL (or private)
10+
// OTHERWISE COMPILER COULD THEORETICALLY INLINE THEM BELOW AND APPLY .substring(1)
11+
// and then they WOULD be shaded
1212
@SuppressWarnings("ConstantField") // field value intentionally mutable for specific use case
1313
static String ALMOST_PREFIX = "!com/microsoft/applicationinsights";
1414

15+
@SuppressWarnings("ConstantField") // field value intentionally mutable for specific use case
16+
static String ALMOST_LOGBACK_PREFIX = "!ch/qos/";
17+
1518
public static String get() {
1619
return ALMOST_PREFIX.substring(1);
1720
}
1821

22+
public static String getLogbackPrefix() {
23+
return ALMOST_LOGBACK_PREFIX.substring(1);
24+
}
25+
1926
private UnshadedSdkPackageName() {}
2027
}

gradlew.bat

Lines changed: 93 additions & 93 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)