diff --git a/src/main/java/com/profiler/trace/AbstractTracer.java b/src/main/java/com/profiler/trace/AbstractTracer.java deleted file mode 100644 index 51fa2d1a2..000000000 --- a/src/main/java/com/profiler/trace/AbstractTracer.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.profiler.trace; - -import java.util.logging.Logger; - -public abstract class AbstractTracer { - - private static final Logger logger = Logger.getLogger(AbstractTracer.class.getName()); - - public static void printStackTrace() { - StackTraceElement[] stackList = Thread.currentThread().getStackTrace(); - - int length = stackList.length; - - for (int loop = 2; loop < length; loop++) { - logger.info("***" + stackList[loop].toString()); - } - } -} diff --git a/src/main/java/com/profiler/trace/DatabaseRequestTracer.java b/src/main/java/com/profiler/trace/DatabaseRequestTracer.java index 493a41fd2..3aea0def7 100644 --- a/src/main/java/com/profiler/trace/DatabaseRequestTracer.java +++ b/src/main/java/com/profiler/trace/DatabaseRequestTracer.java @@ -7,6 +7,8 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import java.util.concurrent.CopyOnWriteArraySet; import com.profiler.config.TomcatProfilerConfig; @@ -14,13 +16,14 @@ import com.profiler.config.TomcatProfilerConstant; import com.profiler.dto.AgentInfoDTO; import com.profiler.dto.RequestDataListThriftDTO; import com.profiler.dto.RequestDataThriftDTO; +import com.profiler.util.NamedThreadLocal; import com.profiler.util.QueryStringUtil; public class DatabaseRequestTracer { public static final String FQCN = DatabaseRequestTracer.class.getName(); - private static Hashtable dbConnectionURL = new Hashtable(); + private static ConcurrentMap dbConnectionURL = new ConcurrentHashMap(); private static Set sqlSet = null; static { @@ -31,14 +34,14 @@ public class DatabaseRequestTracer { } } - private static final ThreadLocal requestDataThreadLocal = new ThreadLocal(); - private static final ThreadLocal> sqlParamMapThreadLocal = new ThreadLocal>(); + private static final ThreadLocal requestDataThreadLocal = new NamedThreadLocal("requestDataThreadLocal"); + private static final ThreadLocal> sqlParamMapThreadLocal = new NamedThreadLocal>("sqlParamMapThreadLocal"); /** * These two variables are used counting "ResultSet.next()" times. */ - private static final ThreadLocal fetchCountThreadLocal = new ThreadLocal(); - private static final ThreadLocal totalFetchCountThreadLocal = new ThreadLocal(); + private static final ThreadLocal fetchCountThreadLocal = new NamedThreadLocal("fetchCountThreadLocal"); + private static final ThreadLocal totalFetchCountThreadLocal = new NamedThreadLocal("totalFetchCountThreadLocal"); public static RequestDataListThriftDTO getRequestDataList() { return requestDataThreadLocal.get(); @@ -96,11 +99,11 @@ public class DatabaseRequestTracer { RequestDataThriftDTO dataDto = new RequestDataThriftDTO(dataType, System.currentTimeMillis()); if (url != null) { int hashCode = url.hashCode(); - if (!dbConnectionURL.containsKey(hashCode)) { - dbConnectionURL.put(hashCode, url); - dataDto.setDataString(url); - // System.out.println(url); - } + String before = dbConnectionURL.putIfAbsent(hashCode, url); + if (before == null) { + dataDto.setDataString(url); + } + dataDto.setDataHashCode(hashCode); } list.add(dataDto); diff --git a/src/main/java/com/profiler/trace/RequestTracer.java b/src/main/java/com/profiler/trace/RequestTracer.java index 203fb0f04..2e78debaf 100644 --- a/src/main/java/com/profiler/trace/RequestTracer.java +++ b/src/main/java/com/profiler/trace/RequestTracer.java @@ -10,7 +10,7 @@ import com.profiler.dto.RequestDataListThriftDTO; import com.profiler.dto.RequestThriftDTO; import com.profiler.sender.DataSender; -public class RequestTracer extends AbstractTracer { +public class RequestTracer { public static final String FQCN = RequestTracer.class.getName(); diff --git a/src/main/java/com/profiler/util/StackTraceUtil.java b/src/main/java/com/profiler/util/StackTraceUtil.java new file mode 100644 index 000000000..7f104f116 --- /dev/null +++ b/src/main/java/com/profiler/util/StackTraceUtil.java @@ -0,0 +1,26 @@ +package com.profiler.util; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class StackTraceUtil { + + private static final Logger logger = Logger.getLogger(StackTraceUtil.class.getName()); + + public static void printCurrentStackTrace() { + printCurrentStackTrace(logger); + } + + public static void printCurrentStackTrace(Logger logger) { + if (!logger.isLoggable(Level.INFO)) { + return; + } + + StackTraceElement[] stackList = Thread.currentThread().getStackTrace(); + int length = stackList.length; + for (int loop = 2; loop < length; loop++) { + logger.info("***" + stackList[loop].toString()); + } + } + +}