This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 1e25678 Logback support AsyncAppender print tid (#2750)
1e25678 is described below
commit 1e25678b9eae0f231d3163622b34e62b9d4c368c
Author: 于玉桔 <[email protected]>
AuthorDate: Mon Jul 1 21:12:19 2019 +0800
Logback support AsyncAppender print tid (#2750)
* AsyncAppender
* improve performance
* fix mdc issue
* fix mdc
* add Async demo
---
.../v1/x/mdc/LogbackMDCPatternConverter.java | 4 +-
.../v1/x/LogbackPatternConverterActivation.java | 3 +-
.../log/logback/v1/x/PrintTraceIdInterceptor.java | 13 ++++++-
.../AsyncAppenderBaseInstrumentation.java} | 28 ++++++--------
.../AsyncAppenderBaseMethodInterceptor.java} | 35 ++++++++++-------
.../LoggingEventConstructorInterceptor.java} | 29 +++++---------
.../LoggingEventInstrumentation.java} | 45 +++++++++-------------
.../logback/v1/x/mdc/MDCConverterActivation.java | 3 +-
.../v1/x/mdc/PrintMDCTraceIdInterceptor.java | 10 ++++-
.../src/main/resources/skywalking-plugin.def | 2 +
.../java-agent/Application-toolkit-logback-1.x.md | 36 +++++++++++++++++
11 files changed, 125 insertions(+), 83 deletions(-)
diff --git
a/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java
b/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java
index 07b0b93..c54541d 100644
---
a/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java
+++
b/apm-application-toolkit/apm-toolkit-logback-1.x/src/main/java/org/apache/skywalking/apm/toolkit/log/logback/v1/x/mdc/LogbackMDCPatternConverter.java
@@ -40,10 +40,10 @@ public class LogbackMDCPatternConverter extends
MDCConverter {
}
@Override
public String convert(ILoggingEvent iLoggingEvent) {
- return convert4TID ? convertTID() : super.convert(iLoggingEvent);
+ return convert4TID ? convertTID(iLoggingEvent) :
super.convert(iLoggingEvent);
}
- public String convertTID() {
+ public String convertTID(ILoggingEvent iLoggingEvent) {
return "TID: N/A";
}
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
index 57c5673..ac6e40e 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/LogbackPatternConverterActivation.java
@@ -28,6 +28,7 @@ import
org.apache.skywalking.apm.agent.core.plugin.interceptor.StaticMethodsInte
import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
@@ -70,7 +71,7 @@ public class LogbackPatternConverterActivation extends
ClassInstanceMethodsEnhan
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher<MethodDescription> getMethodsMatcher() {
- return named(ENHANCE_METHOD);
+ return
named(ENHANCE_METHOD).and(takesArgumentWithType(0,"ch.qos.logback.classic.spi.ILoggingEvent"));
}
@Override
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
index b3b15d9..a39f909 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
@@ -19,12 +19,13 @@
package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x;
-import java.lang.reflect.Method;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import java.lang.reflect.Method;
+
/**
* Created by wusheng on 2016/12/7.
*/
@@ -37,6 +38,14 @@ public class PrintTraceIdInterceptor implements
InstanceMethodsAroundInterceptor
@Override public Object afterMethod(EnhancedInstance objInst, Method
method, Object[] allArguments,
Class<?>[] argumentsTypes, Object ret) throws Throwable {
+ if (!ContextManager.isActive()) {
+ if (allArguments[0] instanceof EnhancedInstance) {
+ String tid = (String) ((EnhancedInstance)
allArguments[0]).getSkyWalkingDynamicField();
+ if (tid != null) {
+ return "TID:" + tid;
+ }
+ }
+ }
return "TID:" + ContextManager.getGlobalTraceId();
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/AsyncAppenderBaseInstrumentation.java
similarity index 70%
copy from
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
copy to
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/AsyncAppenderBaseInstrumentation.java
index dea164b..35dd7be 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/AsyncAppenderBaseInstrumentation.java
@@ -16,48 +16,44 @@
*
*/
-package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc;
+package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
- * Support MDC https://logback.qos.ch/manual/mdc.html
- * @author: zhangkewei
+ * @author zhaoyuguang
*/
-public class MDCConverterActivation extends
ClassInstanceMethodsEnhancePluginDefine {
-
- public static final String INTERCEPT_CLASS =
"org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc.PrintMDCTraceIdInterceptor";
- public static final String ENHANCE_CLASS =
"org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.LogbackMDCPatternConverter";
- public static final String ENHANCE_METHOD = "convertTID";
+public class AsyncAppenderBaseInstrumentation extends
ClassInstanceMethodsEnhancePluginDefine {
@Override
protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
- return null;
+ return new ConstructorInterceptPoint[0];
}
@Override
protected InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
- return new InstanceMethodsInterceptPoint[] {
+ return new InstanceMethodsInterceptPoint[]{
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher<MethodDescription> getMethodsMatcher() {
- return named(ENHANCE_METHOD);
+ return named("put");
}
@Override
public String getMethodsInterceptor() {
- return INTERCEPT_CLASS;
+ return
"org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async.AsyncAppenderBaseMethodInterceptor";
}
- @Override public boolean isOverrideArgs() {
+ @Override
+ public boolean isOverrideArgs() {
return false;
}
}
@@ -66,6 +62,6 @@ public class MDCConverterActivation extends
ClassInstanceMethodsEnhancePluginDef
@Override
protected ClassMatch enhanceClass() {
- return NameMatch.byName(ENHANCE_CLASS);
+ return byName("ch.qos.logback.core.AsyncAppenderBase");
}
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/AsyncAppenderBaseMethodInterceptor.java
similarity index 56%
copy from
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
copy to
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/AsyncAppenderBaseMethodInterceptor.java
index b3b15d9..af9f52a 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/PrintTraceIdInterceptor.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/AsyncAppenderBaseMethodInterceptor.java
@@ -16,32 +16,39 @@
*
*/
+package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async;
-package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x;
-
-import java.lang.reflect.Method;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
+import java.lang.reflect.Method;
+
/**
- * Created by wusheng on 2016/12/7.
+ * @author zhaoyuguang
*/
-public class PrintTraceIdInterceptor implements
InstanceMethodsAroundInterceptor {
- @Override public void beforeMethod(EnhancedInstance objInst, Method
method, Object[] allArguments,
- Class<?>[] argumentsTypes, MethodInterceptResult result) throws
Throwable {
+public class AsyncAppenderBaseMethodInterceptor implements
InstanceMethodsAroundInterceptor {
- }
- @Override public Object afterMethod(EnhancedInstance objInst, Method
method, Object[] allArguments,
- Class<?>[] argumentsTypes, Object ret) throws Throwable {
- return "TID:" + ContextManager.getGlobalTraceId();
+ @Override
+ public void beforeMethod(EnhancedInstance objInst, Method method, Object[]
allArguments, Class<?>[] argumentsTypes,
+ MethodInterceptResult result) throws Throwable {
+ if (allArguments[0] instanceof EnhancedInstance) {
+ EnhancedInstance instances = (EnhancedInstance) allArguments[0];
+
instances.setSkyWalkingDynamicField(ContextManager.getGlobalTraceId());
+ }
}
- @Override public void handleMethodException(EnhancedInstance objInst,
Method method, Object[] allArguments,
- Class<?>[] argumentsTypes, Throwable t) {
+ @Override
+ public Object afterMethod(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Object ret) throws
Throwable {
+ return ret;
+ }
+ @Override
+ public void handleMethodException(EnhancedInstance objInst, Method method,
Object[] allArguments,
+ Class<?>[] argumentsTypes, Throwable t) {
}
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/LoggingEventConstructorInterceptor.java
similarity index 52%
copy from
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
copy to
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/LoggingEventConstructorInterceptor.java
index 2bd4aa0..45fdb2e 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/LoggingEventConstructorInterceptor.java
@@ -16,31 +16,22 @@
*
*/
-package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc;
+package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
-import org.apache.skywalking.apm.agent.core.context.ContextManager;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
-
-import java.lang.reflect.Method;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
/**
- * @author zhangkewei
+ * LoggingEvent implements ILoggingEvent,
+ * which is a message in the blockingQueue of the AsyncAppenderBase.class.
+ * The LoggingEvent is enhanced to carry the tid in the synchronization thread
using `dynamicField`.
+ *
+ * @author zhaoyuguang
*/
-public class PrintMDCTraceIdInterceptor implements
InstanceMethodsAroundInterceptor {
- @Override public void beforeMethod(EnhancedInstance objInst, Method
method, Object[] allArguments,
- Class<?>[] argumentsTypes, MethodInterceptResult result) throws
Throwable {
-
- }
-
- @Override public Object afterMethod(EnhancedInstance objInst, Method
method, Object[] allArguments,
- Class<?>[] argumentsTypes, Object ret) throws Throwable {
- return "TID:" + ContextManager.getGlobalTraceId();
- }
- @Override public void handleMethodException(EnhancedInstance objInst,
Method method, Object[] allArguments,
- Class<?>[] argumentsTypes, Throwable t) {
+public class LoggingEventConstructorInterceptor implements
InstanceConstructorInterceptor {
+ @Override
+ public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
}
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/LoggingEventInstrumentation.java
similarity index 59%
copy from
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
copy to
apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/LoggingEventInstrumentation.java
index dea164b..c91b1ee 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/async/LoggingEventInstrumentation.java
@@ -16,56 +16,47 @@
*
*/
-package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc;
+package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async;
import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.matcher.ElementMatcher;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.InstanceMethodsInterceptPoint;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.ClassInstanceMethodsEnhancePluginDefine;
-import org.apache.skywalking.apm.agent.core.plugin.match.NameMatch;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint;
import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
-import static net.bytebuddy.matcher.ElementMatchers.named;
+import static net.bytebuddy.matcher.ElementMatchers.any;
+import static
org.apache.skywalking.apm.agent.core.plugin.match.NameMatch.byName;
/**
- * Support MDC https://logback.qos.ch/manual/mdc.html
- * @author: zhangkewei
+ * @author zhaoyuguang
*/
-public class MDCConverterActivation extends
ClassInstanceMethodsEnhancePluginDefine {
-
- public static final String INTERCEPT_CLASS =
"org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc.PrintMDCTraceIdInterceptor";
- public static final String ENHANCE_CLASS =
"org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.LogbackMDCPatternConverter";
- public static final String ENHANCE_METHOD = "convertTID";
+public class LoggingEventInstrumentation extends
ClassInstanceMethodsEnhancePluginDefine {
@Override
protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() {
- return null;
- }
-
- @Override
- protected InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
- return new InstanceMethodsInterceptPoint[] {
- new InstanceMethodsInterceptPoint() {
+ return new ConstructorInterceptPoint[]{
+ new ConstructorInterceptPoint() {
@Override
- public ElementMatcher<MethodDescription> getMethodsMatcher() {
- return named(ENHANCE_METHOD);
+ public ElementMatcher<MethodDescription>
getConstructorMatcher() {
+ return any();
}
@Override
- public String getMethodsInterceptor() {
- return INTERCEPT_CLASS;
- }
-
- @Override public boolean isOverrideArgs() {
- return false;
+ public String getConstructorInterceptor() {
+ return
"org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async.LoggingEventConstructorInterceptor";
}
}
};
}
@Override
+ protected InstanceMethodsInterceptPoint[]
getInstanceMethodsInterceptPoints() {
+ return new InstanceMethodsInterceptPoint[0];
+ }
+
+ @Override
protected ClassMatch enhanceClass() {
- return NameMatch.byName(ENHANCE_CLASS);
+ return byName("ch.qos.logback.classic.spi.LoggingEvent");
}
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
index dea164b..aeb6e83 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/MDCConverterActivation.java
@@ -27,6 +27,7 @@ import
org.apache.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterc
import org.apache.skywalking.apm.agent.core.plugin.match.ClassMatch;
import static net.bytebuddy.matcher.ElementMatchers.named;
+import static
org.apache.skywalking.apm.agent.core.plugin.bytebuddy.ArgumentTypeNameMatch.takesArgumentWithType;
/**
* Support MDC https://logback.qos.ch/manual/mdc.html
@@ -49,7 +50,7 @@ public class MDCConverterActivation extends
ClassInstanceMethodsEnhancePluginDef
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher<MethodDescription> getMethodsMatcher() {
- return named(ENHANCE_METHOD);
+ return
named(ENHANCE_METHOD).and(takesArgumentWithType(0,"ch.qos.logback.classic.spi.ILoggingEvent"));
}
@Override
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
index 2bd4aa0..1a11dfd 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/java/org/apache/skywalking/apm/toolkit/activation/log/logback/v1/x/mdc/PrintMDCTraceIdInterceptor.java
@@ -18,8 +18,8 @@
package org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc;
-import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
import
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
@@ -36,6 +36,14 @@ public class PrintMDCTraceIdInterceptor implements
InstanceMethodsAroundIntercep
@Override public Object afterMethod(EnhancedInstance objInst, Method
method, Object[] allArguments,
Class<?>[] argumentsTypes, Object ret) throws Throwable {
+ if (!ContextManager.isActive()) {
+ if (allArguments[0] instanceof EnhancedInstance) {
+ String tid = (String) ((EnhancedInstance)
allArguments[0]).getSkyWalkingDynamicField();
+ if (tid != null) {
+ return "TID:" + tid;
+ }
+ }
+ }
return "TID:" + ContextManager.getGlobalTraceId();
}
diff --git
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def
index 1938bc6..5db3c7d 100644
---
a/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def
+++
b/apm-sniffer/apm-toolkit-activation/apm-toolkit-logback-1.x-activation/src/main/resources/skywalking-plugin.def
@@ -16,3 +16,5 @@
toolkit-logback=org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.LogbackPatternConverterActivation
toolkit-logback=org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.mdc.MDCConverterActivation
+toolkit-logback=org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async.AsyncAppenderBaseInstrumentation
+toolkit-logback=org.apache.skywalking.apm.toolkit.activation.log.logback.v1.x.async.LoggingEventInstrumentation
diff --git
a/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md
b/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md
index 86611b4..fcbfe90 100644
--- a/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md
+++ b/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md
@@ -18,4 +18,40 @@
</appender>
```
+* with the MDC, set `%X{tid}` in `Pattern` section of logback.xml
+```xml
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+ <layout
class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
+ <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread]
%-5level %logger{36} -%msg%n</Pattern>
+ </layout>
+ </encoder>
+ </appender>
+```
+
+
+* Support logback AsyncAppender(MDC also support), No additional configuration
is required. Refer to the demo of logback.xml below. For details: [Logback
AsyncAppender](https://logback.qos.ch/manual/appenders.html#AsyncAppender)
+```xml
+ <configuration scan="true" scanPeriod=" 5 seconds">
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
+ <layout
class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
+ <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread]
%-5level %logger{36} -%msg%n</Pattern>
+ </layout>
+ </encoder>
+ </appender>
+
+ <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
+ <discardingThreshold>0</discardingThreshold>
+ <queueSize>1024</queueSize>
+ <neverBlock>true</neverBlock>
+ <appender-ref ref="STDOUT"/>
+ </appender>
+
+ <root level="INFO">
+ <appender-ref ref="ASYNC"/>
+ </root>
+ </configuration>
+```
+
* When you use `-javaagent` to active the sky-walking tracer, logback will
output **traceId**, if it existed. If the tracer is inactive, the output will
be `TID: N/A`.