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`.

Reply via email to