From ea1543c50611dcd1b2822b259d475bcdec3c4cae Mon Sep 17 00:00:00 2001 From: "minwoo.jung" Date: Thu, 27 Apr 2017 13:12:42 +0900 Subject: [PATCH] [#2862] Remove code using annotation logic in log4j, logback plugin --- .../pinpoint/plugin/log4j/Log4jPlugin.java | 25 +++++++++++++------ .../LoggingEventOfLog4jInterceptor.java | 6 ----- .../plugin/logback/LogbackPlugin.java | 22 +++++++++++----- .../LoggingEventOfLogbackInterceptor.java | 4 --- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/Log4jPlugin.java b/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/Log4jPlugin.java index da21d672c8b7..bc8863378bf3 100644 --- a/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/Log4jPlugin.java +++ b/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/Log4jPlugin.java @@ -16,10 +16,9 @@ package com.navercorp.pinpoint.plugin.log4j; import java.security.ProtectionDomain; +import java.util.Arrays; -import com.navercorp.pinpoint.bootstrap.instrument.InstrumentClass; -import com.navercorp.pinpoint.bootstrap.instrument.InstrumentException; -import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; +import com.navercorp.pinpoint.bootstrap.instrument.*; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; @@ -27,6 +26,7 @@ import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPluginSetupContext; +import com.navercorp.pinpoint.bootstrap.plugin.util.InstrumentUtils; /** * This modifier support log4j 1.2.15 version, or greater. @@ -41,7 +41,7 @@ public class Log4jPlugin implements ProfilerPlugin, TransformTemplateAware { private final PLogger logger = PLoggerFactory.getLogger(getClass()); private TransformTemplate transformTemplate; - + @Override public void setup(ProfilerPluginSetupContext context) { final Log4jConfig config = new Log4jConfig(context.getConfig()); @@ -94,11 +94,22 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, Strin + "\nconstructor prototype : LoggingEvent(final String fqnOfCategoryClass, final Category logger, final long timeStamp, final Level level, final Object message, final String threadName, final ThrowableInformation throwable, final String ndc, final LocationInfo info, final java.util.Map properties);"); return null; } - - target.addInterceptor("com.navercorp.pinpoint.plugin.log4j.interceptor.LoggingEventOfLog4jInterceptor"); - + + final String interceptorClassName = "com.navercorp.pinpoint.plugin.log4j.interceptor.LoggingEventOfLog4jInterceptor"; + addInterceptor(target, new String[]{"java.lang.String", "org.apache.log4j.Category", "org.apache.log4j.Priority", "java.lang.Object", "java.lang.Throwable"}, interceptorClassName); + addInterceptor(target, new String[]{"java.lang.String", "org.apache.log4j.Category", "long", "org.apache.log4j.Priority", "java.lang.Object", "java.lang.Throwable"}, interceptorClassName); + addInterceptor(target, new String[]{"java.lang.String", "org.apache.log4j.Category", "long", "org.apache.log4j.Level", "java.lang.Object", "java.lang.String", "org.apache.log4j.spi.ThrowableInformation", "java.lang.String", "org.apache.log4j.spi.LocationInfo", "java.util.Map"}, interceptorClassName); + return target.toBytecode(); } + + private void addInterceptor(InstrumentClass target, String[] parameterTypes, String interceptorClassName) throws InstrumentException { + InstrumentMethod constructor = InstrumentUtils.findConstructor(target, parameterTypes); + if (constructor == null) { + throw new NotFoundInstrumentException("Cannot find constructor with parameter types: " + Arrays.toString(parameterTypes)); + } + constructor.addInterceptor(interceptorClassName); + } }); } diff --git a/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/interceptor/LoggingEventOfLog4jInterceptor.java b/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/interceptor/LoggingEventOfLog4jInterceptor.java index 04cc69f481cb..cec15867dd44 100644 --- a/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/interceptor/LoggingEventOfLog4jInterceptor.java +++ b/plugins/log4j/src/main/java/com/navercorp/pinpoint/plugin/log4j/interceptor/LoggingEventOfLog4jInterceptor.java @@ -27,12 +27,6 @@ /** * @author minwoo.jung */ - -@TargetConstructors({ - @TargetConstructor({"java.lang.String", "org.apache.log4j.Category", "org.apache.log4j.Priority", "java.lang.Object", "java.lang.Throwable"}), - @TargetConstructor({"java.lang.String", "org.apache.log4j.Category", "long", "org.apache.log4j.Priority", "java.lang.Object", "java.lang.Throwable"}), - @TargetConstructor({"java.lang.String", "org.apache.log4j.Category", "long", "org.apache.log4j.Level", "java.lang.Object", "java.lang.String", "org.apache.log4j.spi.ThrowableInformation", "java.lang.String", "org.apache.log4j.spi.LocationInfo", "java.util.Map"}) -}) public class LoggingEventOfLog4jInterceptor implements AroundInterceptor0 { private static final String TRANSACTION_ID = "PtxId"; private static final String SPAN_ID = "PspanId"; diff --git a/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/LogbackPlugin.java b/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/LogbackPlugin.java index 75dd00cf6ed4..a80320487ca3 100644 --- a/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/LogbackPlugin.java +++ b/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/LogbackPlugin.java @@ -16,10 +16,9 @@ package com.navercorp.pinpoint.plugin.logback; import java.security.ProtectionDomain; +import java.util.Arrays; -import com.navercorp.pinpoint.bootstrap.instrument.InstrumentClass; -import com.navercorp.pinpoint.bootstrap.instrument.InstrumentException; -import com.navercorp.pinpoint.bootstrap.instrument.Instrumentor; +import com.navercorp.pinpoint.bootstrap.instrument.*; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformCallback; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplate; import com.navercorp.pinpoint.bootstrap.instrument.transformer.TransformTemplateAware; @@ -27,6 +26,7 @@ import com.navercorp.pinpoint.bootstrap.logging.PLoggerFactory; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPlugin; import com.navercorp.pinpoint.bootstrap.plugin.ProfilerPluginSetupContext; +import com.navercorp.pinpoint.bootstrap.plugin.util.InstrumentUtils; /** * This modifier support slf4j 1.4.1 version and logback 0.9.8 version, or greater. @@ -87,11 +87,21 @@ public byte[] doInTransform(Instrumentor instrumentor, ClassLoader loader, Strin + "\nconstructor prototype : LoggingEvent(String fqcn, Logger logger, Level level, String message, Throwable throwable, Object[] argArray);"); return null; } - - target.addInterceptor("com.navercorp.pinpoint.plugin.logback.interceptor.LoggingEventOfLogbackInterceptor"); - + + final String interceptorClassName = "com.navercorp.pinpoint.plugin.logback.interceptor.LoggingEventOfLogbackInterceptor"; + addInterceptor(target, new String[0], interceptorClassName); + addInterceptor(target, new String[]{"java.lang.String", "ch.qos.logback.classic.Logger", "ch.qos.logback.classic.Level", "java.lang.String", "java.lang.Throwable", "java.lang.Object[]"}, interceptorClassName); + return target.toBytecode(); } + + private void addInterceptor(InstrumentClass target, String[] parameterTypes, String interceptorClassName) throws InstrumentException { + InstrumentMethod constructor = InstrumentUtils.findConstructor(target, parameterTypes); + if (constructor == null) { + throw new NotFoundInstrumentException("Cannot find constructor with parameter types: " + Arrays.toString(parameterTypes)); + } + constructor.addInterceptor(interceptorClassName); + } }); } diff --git a/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/interceptor/LoggingEventOfLogbackInterceptor.java b/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/interceptor/LoggingEventOfLogbackInterceptor.java index 3875ca646da8..ab69c4b315db 100644 --- a/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/interceptor/LoggingEventOfLogbackInterceptor.java +++ b/plugins/logback/src/main/java/com/navercorp/pinpoint/plugin/logback/interceptor/LoggingEventOfLogbackInterceptor.java @@ -27,10 +27,6 @@ /** * @author minwoo.jung */ -@TargetConstructors({ - @TargetConstructor({}), - @TargetConstructor({"java.lang.String", "ch.qos.logback.classic.Logger", "ch.qos.logback.classic.Level", "java.lang.String", "java.lang.Throwable", "java.lang.Object[]"}) -}) public class LoggingEventOfLogbackInterceptor implements AroundInterceptor0 { private static final String TRANSACTION_ID = "PtxId"; private static final String SPAN_ID = "PspanId";