From da395b3b997693bca902a11a2cc3b41bf8333785 Mon Sep 17 00:00:00 2001 From: Woonduk Kang Date: Tue, 31 Jul 2012 06:57:05 +0000 Subject: [PATCH] =?UTF-8?q?[=EA=B0=95=EC=9A=B4=EB=8D=95]=20[LUCYSUS-1744]?= =?UTF-8?q?=20HIPPO=20=EC=9D=98=20=EB=A1=9C=EA=B1=B0=EB=A5=BC=20JDK=20?= =?UTF-8?q?=EB=A1=9C=EA=B1=B0=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=A8.=20ma?= =?UTF-8?q?ven=EC=97=90=20junit=ED=8F=AC=ED=95=A8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-tomcat-profiler/trunk@475 84d0f5b1-2673-498c-a247-62c4ff18d310 --- pom.xml | 18 +- .../java/com/profiler/TomcatProfiler.java | 21 +- .../profiler/config/TomcatProfilerConfig.java | 68 ++- .../com/profiler/logging/DefaultLogger.java | 52 -- .../java/com/profiler/logging/LogLevel.java | 11 - .../java/com/profiler/logging/Logger.java | 28 - .../logging/ThreadSafeSimpleDateFormat.java | 20 - .../CubridPreparedStatementModifier.java | 15 +- .../db/cubrid/CubridResultSetModifier.java | 15 +- .../db/cubrid/CubridStatementModifier.java | 15 +- .../db/cubrid/CubridUStatementModifier.java | 15 +- .../db/dbcp/DBCPBasicDataSourceModifier.java | 15 +- .../modifier/db/dbcp/DBCPPoolModifier.java | 15 +- .../db/mssql/MSSQLConnectionModifier.java | 15 +- .../mssql/MSSQLPreparedStatementModifier.java | 17 +- .../db/mssql/MSSQLResultSetModifier.java | 16 +- .../db/mssql/MSSQLStatementModifier.java | 16 +- .../db/mysql/MySQLConnectionImplModifier.java | 15 +- .../mysql/MySQLPreparedStatementModifier.java | 16 +- .../db/mysql/MySQLResultSetModifier.java | 19 +- .../db/mysql/MySQLStatementModifier.java | 15 +- .../OraclePreparedStatementModifier.java | 16 +- .../db/oracle/OracleResultSetModifier.java | 15 +- .../db/oracle/OracleStatementModifier.java | 14 +- .../EntryPointStandardHostValveModifier.java | 34 +- .../tomcat/TomcatConnectorModifier.java | 15 +- .../tomcat/TomcatStandardServiceModifier.java | 15 +- .../com/profiler/sender/AgentInfoSender.java | 56 +- .../com/profiler/trace/RequestDataTracer.java | 504 +++++++++--------- .../trace/RequestTransactionTracer.java | 190 +++---- .../java/com/profiler/util/ByteCodeUtil.java | 55 +- .../java/com/profiller/logger/JdkLogger.java | 18 + 32 files changed, 741 insertions(+), 628 deletions(-) delete mode 100644 src/main/java/com/profiler/logging/DefaultLogger.java delete mode 100644 src/main/java/com/profiler/logging/LogLevel.java delete mode 100644 src/main/java/com/profiler/logging/Logger.java delete mode 100644 src/main/java/com/profiler/logging/ThreadSafeSimpleDateFormat.java create mode 100644 src/test/java/com/profiller/logger/JdkLogger.java diff --git a/pom.xml b/pom.xml index 850906f91..c38f53f0f 100644 --- a/pom.xml +++ b/pom.xml @@ -51,33 +51,41 @@ org.javassist javassist 3.16.1-GA + compile org.apache.thrift libthrift 0.8.0 + compile org.slf4j slf4j-api 1.5.8 + provided org.apache.tomcat servlet-api 6.0.35 + provided org.apache.tomcat catalina 6.0.35 + provided + + junit + junit + 4.8.2 + test + - ${basedir}/src/main/java - ${basedir}/src/test/java - ${basedir}/src/main/java @@ -132,7 +140,9 @@ 2.4 - src/main/resources/META-INF/MANIFEST.MF + + com.profiler.TomcatProfiler + diff --git a/src/main/java/com/profiler/TomcatProfiler.java b/src/main/java/com/profiler/TomcatProfiler.java index 4ff287459..9bbe400e6 100644 --- a/src/main/java/com/profiler/TomcatProfiler.java +++ b/src/main/java/com/profiler/TomcatProfiler.java @@ -4,19 +4,20 @@ import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; import java.lang.instrument.Instrumentation; import java.security.ProtectionDomain; +import java.util.logging.Level; +import java.util.logging.Logger; +import com.profiler.modifier.DefaultModifierRegistry; +import com.profiler.modifier.Modifier; +import com.profiler.modifier.ModifierRegistry; import javassist.ClassPool; import javassist.NotFoundException; import com.profiler.config.TomcatProfilerConfig; -import com.profiler.logging.Logger; -import com.profiler.modifier.DefaultModifierRegistry; -import com.profiler.modifier.Modifier; -import com.profiler.modifier.ModifierRegistry; public class TomcatProfiler implements ClassFileTransformer { - private static final Logger logger = Logger.getLogger(TomcatProfiler.class); + private static final Logger logger = Logger.getLogger(TomcatProfiler.class.getName()); private String agentArgString = ""; private Instrumentation instrumentation; @@ -54,7 +55,10 @@ public class TomcatProfiler implements ClassFileTransformer { String catalinaHome = System.getProperty("catalina.home"); if (catalinaHome != null) { - logger.info("CATALINA_HOME=%s", catalinaHome); + if (logger.isLoggable(Level.INFO)) { + logger.info("CATALINA_HOME=" + catalinaHome); + } + appendClassPath(classPool, catalinaHome + "/lib/servlet-api.jar"); appendClassPath(classPool, catalinaHome + "/lib/catalina.jar"); } @@ -65,7 +69,10 @@ public class TomcatProfiler implements ClassFileTransformer { try { classPool.appendClassPath(pathName); } catch (NotFoundException e) { - logger.error("lib not found. " + e.getMessage()); + if (logger.isLoggable(Level.WARNING)) { + logger.warning("lib not found. " + e.getMessage()); + } + } } diff --git a/src/main/java/com/profiler/config/TomcatProfilerConfig.java b/src/main/java/com/profiler/config/TomcatProfilerConfig.java index edd81357b..45d836433 100644 --- a/src/main/java/com/profiler/config/TomcatProfilerConfig.java +++ b/src/main/java/com/profiler/config/TomcatProfilerConfig.java @@ -4,14 +4,14 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; -import com.profiler.TomcatProfiler; -import com.profiler.logging.LogLevel; -import com.profiler.logging.Logger; public class TomcatProfilerConfig { - private static final Logger logger = Logger.getLogger(TomcatProfilerConfig.class); + + private static final Logger logger = Logger.getLogger(TomcatProfilerConfig.class.getName()); public static String SERVER_IP = "127.0.0.1"; @@ -24,7 +24,7 @@ public class TomcatProfilerConfig { public static long JVM_STAT_GAP = 5000L; public static long SERVER_CONNECT_RETRY_GAP = 1000L; - public static LogLevel LOG_LEVEL = LogLevel.INFO; + public static Level LOG_LEVEL = Level.INFO; /** * If sql query count is over 10000 it consumes Memory. So sqlHashSet uses @@ -40,7 +40,7 @@ public class TomcatProfilerConfig { String hippoConfigFileName = System.getProperty("hippo.config"); if (hippoConfigFileName == null) { - logger.warn("hippo.config property is not set. Using default values"); + logger.info("hippo.config property is not set. Using default values"); return config; } @@ -49,9 +49,13 @@ public class TomcatProfilerConfig { setPropertyValues(config, properties); return config; } catch (FileNotFoundException fnfe) { - logger.error("%s file is not exists. Please check configuration.", hippoConfigFileName); - } catch (Exception e) { - logger.fatal(e.getMessage()); + if (logger.isLoggable(Level.WARNING)) { + logger.warning(hippoConfigFileName + " file is not exists. Please check configuration."); + } + } catch (IOException e) { + if (logger.isLoggable(Level.WARNING)) { + logger.warning(e.getMessage()); + } } return config; } @@ -84,47 +88,69 @@ public class TomcatProfilerConfig { if ((temp = prop.get("SERVER_IP")) != null) { config.SERVER_IP = temp.toString(); - logger.info("SERVER_IP=%s", SERVER_IP); + if (logger.isLoggable(Level.INFO)) { + logger.info("SERVER_IP=" + SERVER_IP); + } } if ((temp = prop.get("AGENT_TCP_LISTEN_PORT")) != null) { config.AGENT_TCP_LISTEN_PORT = Integer.parseInt(temp.toString()); - logger.info("AGENT_TCP_LISTEN_PORT=%d", AGENT_TCP_LISTEN_PORT); + if (logger.isLoggable(Level.INFO)) { + logger.info("AGENT_TCP_LISTEN_PORT=" + AGENT_TCP_LISTEN_PORT); + } } if ((temp = prop.get("SERVER_TCP_LISTEN_PORT")) != null) { config.SERVER_TCP_LISTEN_PORT = Integer.parseInt(temp.toString()); - logger.info("SERVER_TCP_LISTEN_PORT=%d", SERVER_TCP_LISTEN_PORT); + if (logger.isLoggable(Level.INFO)) { + logger.info("SERVER_TCP_LISTEN_PORT=" + SERVER_TCP_LISTEN_PORT); + } } if ((temp = prop.get("REQUEST_TRANSACTION_DATA_LISTEN_PORT")) != null) { config.REQUEST_TRANSACTION_DATA_LISTEN_PORT = Integer.parseInt(temp.toString()); - logger.info("REQUEST_TRANSACTION_DATA_LISTEN_PORT=%d", REQUEST_TRANSACTION_DATA_LISTEN_PORT); + if (logger.isLoggable(Level.INFO)) { + logger.info("REQUEST_TRANSACTION_DATA_LISTEN_PORT=" + REQUEST_TRANSACTION_DATA_LISTEN_PORT); + } } if ((temp = prop.get("REQUEST_DATA_LISTEN_PORT")) != null) { config.REQUEST_DATA_LISTEN_PORT = Integer.parseInt(temp.toString()); - logger.info("REQUEST_DATA_LISTEN_PORT=%d", REQUEST_DATA_LISTEN_PORT); + if (logger.isLoggable(Level.INFO)) { + logger.info("REQUEST_DATA_LISTEN_PORT=" + REQUEST_DATA_LISTEN_PORT); + } } if ((temp = prop.get("JVM_DATA_LISTEN_PORT")) != null) { config.JVM_DATA_LISTEN_PORT = Integer.parseInt(temp.toString()); - logger.info("JVM_DATA_LISTEN_PORT=%d", JVM_DATA_LISTEN_PORT); + if (logger.isLoggable(Level.INFO)) { + logger.info("JVM_DATA_LISTEN_PORT=" + JVM_DATA_LISTEN_PORT); + } } if ((temp = prop.get("JVM_STAT_GAP")) != null) { config.JVM_STAT_GAP = Long.parseLong(temp.toString()); - logger.info("JVM_STAT_GAP=%d", JVM_STAT_GAP); + if (logger.isLoggable(Level.INFO)) { + logger.info("JVM_STAT_GAP=" + JVM_STAT_GAP); + } } if ((temp = prop.get("SERVER_CONNECT_RETRY_GAP")) != null) { config.SERVER_CONNECT_RETRY_GAP = Long.parseLong(temp.toString()); - logger.info("SERVER_CONNECT_RETRY_GAP=%d", SERVER_CONNECT_RETRY_GAP); + if (logger.isLoggable(Level.INFO)) { + logger.info("SERVER_CONNECT_RETRY_GAP=" + SERVER_CONNECT_RETRY_GAP); + } } if ((temp = prop.get("QUERY_COUNT_OVER_10000")) != null) { config.QUERY_COUNT_OVER_10000 = Boolean.parseBoolean(temp.toString()); - logger.info("QUERY_COUNT_OVER_10000=%s", QUERY_COUNT_OVER_10000); + if (logger.isLoggable(Level.INFO)) { + logger.info("QUERY_COUNT_OVER_10000=" + QUERY_COUNT_OVER_10000); + } } if ((temp = prop.get("JDBC_PROFILE")) != null) { config.JDBC_PROFILE = Boolean.parseBoolean(temp.toString()); - logger.info("JDBC_PROFILE=%s", config.JDBC_PROFILE); + if (logger.isLoggable(Level.INFO)) { + logger.info("JDBC_PROFILE=" + config.JDBC_PROFILE); + } } if ((temp = prop.get("LOG_LEVEL")) != null) { - config.LOG_LEVEL = LogLevel.valueOf(temp.toString()); - logger.info("LOG_LEVEL=%s", LOG_LEVEL); + config.LOG_LEVEL = Level.parse(temp.toString()); + if (logger.isLoggable(Level.INFO)) { + logger.info("LOG_LEVEL=" + LOG_LEVEL); + } } logger.info("configuration loaded successfully."); diff --git a/src/main/java/com/profiler/logging/DefaultLogger.java b/src/main/java/com/profiler/logging/DefaultLogger.java deleted file mode 100644 index 1cc4a5744..000000000 --- a/src/main/java/com/profiler/logging/DefaultLogger.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.profiler.logging; - -import java.util.Date; - -import com.profiler.config.TomcatProfilerConfig; - -public class DefaultLogger extends Logger { - - public DefaultLogger(String name) { - super(name); - } - - @Override - public void info(String message, Object... args) { - if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.INFO.priority) { - System.out.printf("[HIPPO] %s [INFO] [%s] %s \n", df.format(new Date()), name, String.format(message, args)); - } - } - - @Override - public void debug(String message, Object... args) { - if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.DEBUG.priority) { - System.out.printf("[HIPPO] %s [DEBUG] [%s] %s \n", df.format(new Date()), name, String.format(message, args)); - } - } - - @Override - public void warn(String message, Object... args) { - if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.WARN.priority) { - System.out.printf("[HIPPO] %s [WARN] [%s] %s \n", df.format(new Date()), name, String.format(message, args)); - } - } - - @Override - public void error(String message, Object... args) { - if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.ERROR.priority) { - System.out.printf("[HIPPO] %s [ERROR] [%s] %s \n", df.format(new Date()), name, String.format(message, args)); - } - } - - @Override - public void fatal(String message, Object... args) { - if (TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.FATAL.priority) { - System.out.printf("[HIPPO] %s [FATAL] [%s] %s \n", df.format(new Date()), name, String.format(message, args)); - } - } - - @Override - public boolean isDebugEnabled() { - return TomcatProfilerConfig.LOG_LEVEL.priority >= LogLevel.DEBUG.priority; - } -} diff --git a/src/main/java/com/profiler/logging/LogLevel.java b/src/main/java/com/profiler/logging/LogLevel.java deleted file mode 100644 index 19acc959c..000000000 --- a/src/main/java/com/profiler/logging/LogLevel.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.profiler.logging; - -public enum LogLevel { - INFO(0), DEBUG(1), WARN(2), ERROR(3), FATAL(4); - - int priority; - - LogLevel(int priority) { - this.priority = priority; - } -} diff --git a/src/main/java/com/profiler/logging/Logger.java b/src/main/java/com/profiler/logging/Logger.java deleted file mode 100644 index 01c6fcefc..000000000 --- a/src/main/java/com/profiler/logging/Logger.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.profiler.logging; - -public abstract class Logger { - - protected final String name; - - protected final ThreadSafeSimpleDateFormat df = new ThreadSafeSimpleDateFormat(); - - public Logger(String name) { - this.name = name; - } - - public static Logger getLogger(Class clazz) { - return new DefaultLogger(clazz.getName()); - } - - public abstract void info(String message, Object... args); - - public abstract void debug(String message, Object... args); - - public abstract void warn(String message, Object... args); - - public abstract void error(String message, Object... args); - - public abstract void fatal(String message, Object... args); - - public abstract boolean isDebugEnabled(); -} diff --git a/src/main/java/com/profiler/logging/ThreadSafeSimpleDateFormat.java b/src/main/java/com/profiler/logging/ThreadSafeSimpleDateFormat.java deleted file mode 100644 index 461894db7..000000000 --- a/src/main/java/com/profiler/logging/ThreadSafeSimpleDateFormat.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.profiler.logging; - -import com.profiler.util.NamedThreadLocal; - -import java.text.SimpleDateFormat; -import java.util.Date; - -public class ThreadSafeSimpleDateFormat { - - private ThreadLocal CACHE = new NamedThreadLocal("SimpleDateFormatCache") { - @Override - protected SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); - } - }; - - public String format(Date date) { - return CACHE.get().format(date); - } -} diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java index 470360f0c..bfc157ca2 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridPreparedStatementModifier.java @@ -6,19 +6,23 @@ import javassist.CtConstructor; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class CubridPreparedStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(CubridPreparedStatementModifier.class); + private final Logger logger = Logger.getLogger(CubridPreparedStatementModifier.class.getName()); public CubridPreparedStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -34,8 +38,9 @@ public class CubridPreparedStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if(logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java index b1c2db475..652503532 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridResultSetModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class CubridResultSetModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(CubridResultSetModifier.class); + private final Logger logger = Logger.getLogger(CubridResultSetModifier.class.getName()); public CubridResultSetModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)) { + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -33,8 +37,9 @@ public class CubridResultSetModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if(logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java index a934c6d12..c8f697853 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridStatementModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class CubridStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(CubridStatementModifier.class); + private final Logger logger = Logger.getLogger(CubridStatementModifier.class.getName()); public CubridStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)) { + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -32,8 +36,9 @@ public class CubridStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if(logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java b/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java index 17d4fdf04..60cc12b10 100644 --- a/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/cubrid/CubridUStatementModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class CubridUStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(CubridUStatementModifier.class); + private final Logger logger = Logger.getLogger(CubridUStatementModifier.class.getName()); public CubridUStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -32,8 +36,9 @@ public class CubridUStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java b/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java index e38ee54b5..3fd5dee13 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPBasicDataSourceModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class DBCPBasicDataSourceModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(DBCPBasicDataSourceModifier.class); + private final Logger logger = Logger.getLogger(DBCPBasicDataSourceModifier.class.getName()); public DBCPBasicDataSourceModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -32,8 +36,9 @@ public class DBCPBasicDataSourceModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java b/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java index d20c548ff..6aa2db16a 100644 --- a/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java +++ b/src/main/java/com/profiler/modifier/db/dbcp/DBCPPoolModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class DBCPPoolModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(DBCPPoolModifier.class); + private final Logger logger = Logger.getLogger(DBCPPoolModifier.class.getName()); public DBCPPoolModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -32,8 +36,9 @@ public class DBCPPoolModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java index 4772ea90b..997897d10 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLConnectionModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class MSSQLConnectionModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(MSSQLConnectionModifier.class); + private final Logger logger = Logger.getLogger(MSSQLConnectionModifier.class.getName()); public MSSQLConnectionModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethods(javassistClassName, classFileBuffer); } @@ -33,8 +37,9 @@ public class MSSQLConnectionModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java index 0551620e7..043cf6245 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLPreparedStatementModifier.java @@ -6,19 +6,23 @@ import javassist.CtConstructor; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class MSSQLPreparedStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(MSSQLPreparedStatementModifier.class); + private final Logger logger = Logger.getLogger(MSSQLPreparedStatementModifier.class.getName()); public MSSQLPreparedStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -35,8 +39,9 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } @@ -55,7 +60,7 @@ public class MSSQLPreparedStatementModifier extends AbstractModifier { private void updateConstructor(CtClass cc) throws Exception { CtConstructor[] constructorList = cc.getConstructors(); - + if (constructorList.length == 1) { CtConstructor constructor = constructorList[0]; constructor.insertAfter("{" + TomcatProfilerConstant.CLASS_NAME_REQUEST_DATA_TRACER + ".putSqlQuery(" + TomcatProfilerConstant.REQ_DATA_TYPE_DB_QUERY + ",$2); }"); diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java index 496c1f96b..6853921f4 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLResultSetModifier.java @@ -5,19 +5,24 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; + import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class MSSQLResultSetModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(MSSQLResultSetModifier.class); + private final Logger logger = Logger.getLogger(MSSQLResultSetModifier.class.getName()); public MSSQLResultSetModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -33,8 +38,9 @@ public class MSSQLResultSetModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java b/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java index 24727a942..fdc9cd5de 100644 --- a/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mssql/MSSQLStatementModifier.java @@ -5,19 +5,22 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; -public class MSSQLStatementModifier extends AbstractModifier { +import java.util.logging.Level; +import java.util.logging.Logger; - private static final Logger logger = Logger.getLogger(MSSQLStatementModifier.class); +public class MSSQLStatementModifier extends AbstractModifier { + private static final Logger logger = Logger.getLogger(MSSQLStatementModifier.class.getName()); public MSSQLStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -32,8 +35,9 @@ public class MSSQLStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java index 93e527dba..efd35205c 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLConnectionImplModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class MySQLConnectionImplModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(MySQLConnectionImplModifier.class); + private final Logger logger = Logger.getLogger(MySQLConnectionImplModifier.class.getName()); public MySQLConnectionImplModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethods(javassistClassName, classFileBuffer); } @@ -34,8 +38,9 @@ public class MySQLConnectionImplModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java index 869b75d82..f2cccadc3 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLPreparedStatementModifier.java @@ -6,19 +6,22 @@ import javassist.CtConstructor; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; -public class MySQLPreparedStatementModifier extends AbstractModifier { +import java.util.logging.Level; +import java.util.logging.Logger; - private static final Logger logger = Logger.getLogger(MySQLPreparedStatementModifier.class); +public class MySQLPreparedStatementModifier extends AbstractModifier { + private final Logger logger = Logger.getLogger(MySQLPreparedStatementModifier.class.getName()); public MySQLPreparedStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -35,8 +38,9 @@ public class MySQLPreparedStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java index 771999b73..d7e4f7090 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLResultSetModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class MySQLResultSetModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(MySQLResultSetModifier.class); + private final Logger logger = Logger.getLogger(MySQLResultSetModifier.class.getName()); - public MySQLResultSetModifier(ClassPool classPool) { + public MySQLResultSetModifier(ClassPool classPool) { super(classPool); } - + public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -33,8 +37,9 @@ public class MySQLResultSetModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java b/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java index 901b129a3..8d2e71418 100644 --- a/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/mysql/MySQLStatementModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class MySQLStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(MySQLStatementModifier.class); + private final Logger logger = Logger.getLogger(MySQLStatementModifier.class.getName()); public MySQLStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -32,8 +36,9 @@ public class MySQLStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java b/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java index f675158c0..2f4e32584 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OraclePreparedStatementModifier.java @@ -6,19 +6,24 @@ import javassist.CtConstructor; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; + import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class OraclePreparedStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(OraclePreparedStatementModifier.class); + private final Logger logger = Logger.getLogger(OraclePreparedStatementModifier.class.getName()); public OraclePreparedStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -35,8 +40,9 @@ public class OraclePreparedStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java b/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java index 04b5025f9..e43fe2cb1 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleResultSetModifier.java @@ -5,19 +5,23 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class OracleResultSetModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(OracleResultSetModifier.class); + private final Logger logger = Logger.getLogger(OracleResultSetModifier.class.getName()); public OracleResultSetModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -33,8 +37,9 @@ public class OracleResultSetModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java b/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java index 774d81ffe..7951809ec 100644 --- a/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java +++ b/src/main/java/com/profiler/modifier/db/oracle/OracleStatementModifier.java @@ -5,18 +5,22 @@ import javassist.CtClass; import javassist.CtMethod; import com.profiler.config.TomcatProfilerConstant; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + public class OracleStatementModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(OracleStatementModifier.class); + private final Logger logger = Logger.getLogger(OracleStatementModifier.class.getName()); public OracleStatementModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } checkLibrary(classLoader, javassistClassName); return changeMethod(javassistClassName, classFileBuffer); } @@ -31,7 +35,9 @@ public class OracleStatementModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java b/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java index f4b973051..da5a0ccc0 100644 --- a/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/EntryPointStandardHostValveModifier.java @@ -7,9 +7,11 @@ import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + /** * Modify org.apache.catalina.core.StandardHostValve class * @@ -18,14 +20,16 @@ import com.profiler.modifier.AbstractModifier; */ public class EntryPointStandardHostValveModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(EntryPointStandardHostValveModifier.class); + private final Logger logger = Logger.getLogger(EntryPointStandardHostValveModifier.class.getName()); public EntryPointStandardHostValveModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } return changeServiceMethod(classLoader, javassistClassName, classFileBuffer); } @@ -51,8 +55,9 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } @@ -68,7 +73,7 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { insertCode.append(getParameterValues()); insertCode.append(CLASS_NAME_REQUEST_TRACER).append(".startTransaction(requestURL,clientIP,requestTime,params);"); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("System.out.println(\"--- ApplicationFilterChain.doFilter() is started.\");"); } @@ -83,7 +88,7 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { insertCode.append("while(attrs.hasMoreElements()) {"); insertCode.append("String keyString=attrs.nextElement().toString();"); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("System.out.println(keyString+\"=\"+tempRequest.getParameter(keyString));"); } @@ -94,7 +99,7 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { insertCode.append("if(valueStringLength>0 && valueStringLength<100) params.append(keyString).append(\"=\").append(valueString).append(\",\");"); insertCode.append("}}"); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("System.out.println(params);"); } @@ -106,7 +111,7 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { insertCode.append("{"); insertCode.append(CLASS_NAME_REQUEST_TRACER).append(".endTransaction();"); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("System.out.println(\"--- ApplicationFilterChain.doFilter() is ended.\");"); } @@ -118,7 +123,7 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { private String getInvokeMethodCatchInsertCode() { StringBuilder insertCode = new StringBuilder(); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("{"); insertCode.append("System.out.println(\"------------------------------------------------\");"); insertCode.append("System.out.println(\"--- \"+$e.getMessage()+\" is occured !!!\");"); @@ -126,13 +131,13 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { insertCode.append(CLASS_NAME_REQUEST_TRACER).append(".exceptionTransaction($e);"); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("System.out.println(\"------------------------------------------------\");"); } insertCode.append("throw $e;"); - if (logger.isDebugEnabled()) { + if (logger.isLoggable(Level.FINE)) { insertCode.append("}"); } @@ -145,8 +150,9 @@ public class EntryPointStandardHostValveModifier extends AbstractModifier { classLoader.loadClass(CLASS_NAME_REQUEST_THRIFT_DTO); classLoader.loadClass("org.apache.thrift.TBase"); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if(logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } } } \ No newline at end of file diff --git a/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java b/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java index 863717acc..f27d4c04e 100644 --- a/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/TomcatConnectorModifier.java @@ -4,9 +4,11 @@ import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + /** * When org.apache.catalina.core.StandardService class is loaded in ClassLoader, * this class modifies methods. @@ -16,14 +18,16 @@ import com.profiler.modifier.AbstractModifier; */ public class TomcatConnectorModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(TomcatConnectorModifier.class); + private final Logger logger = Logger.getLogger(TomcatConnectorModifier.class.getName()); public TomcatConnectorModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } return changeMethod(javassistClassName, classFileBuffer); } @@ -40,8 +44,9 @@ public class TomcatConnectorModifier extends AbstractModifier { return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } // TODO 변환 실패에 의한 예가 아니면 원본을 반환 해줘야 할까? return null; diff --git a/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java b/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java index f6c436c0a..f35064172 100644 --- a/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java +++ b/src/main/java/com/profiler/modifier/tomcat/TomcatStandardServiceModifier.java @@ -5,9 +5,11 @@ import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; -import com.profiler.logging.Logger; import com.profiler.modifier.AbstractModifier; +import java.util.logging.Level; +import java.util.logging.Logger; + /** * When org.apache.catalina.core.StandardService class is loaded in ClassLoader, * this class modifies methods. @@ -17,14 +19,16 @@ import com.profiler.modifier.AbstractModifier; */ public class TomcatStandardServiceModifier extends AbstractModifier { - private static final Logger logger = Logger.getLogger(TomcatStandardServiceModifier.class); + private final Logger logger = Logger.getLogger(TomcatStandardServiceModifier.class.getName()); public TomcatStandardServiceModifier(ClassPool classPool) { super(classPool); } public byte[] modify(ClassLoader classLoader, String javassistClassName, byte[] classFileBuffer) { - logger.info("Modifing. %s", javassistClassName); + if (logger.isLoggable(Level.INFO)){ + logger.info("Modifing. " + javassistClassName); + } return changeMethod(javassistClassName, classFileBuffer); } @@ -41,8 +45,9 @@ public class TomcatStandardServiceModifier extends AbstractModifier { printClassConvertComplete(javassistClassName); return cc.toBytecode(); } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } return null; } diff --git a/src/main/java/com/profiler/sender/AgentInfoSender.java b/src/main/java/com/profiler/sender/AgentInfoSender.java index 51ef1db80..20d0b58fc 100644 --- a/src/main/java/com/profiler/sender/AgentInfoSender.java +++ b/src/main/java/com/profiler/sender/AgentInfoSender.java @@ -2,14 +2,15 @@ package com.profiler.sender; import java.io.ObjectOutputStream; import java.net.Socket; +import java.util.logging.Level; +import java.util.logging.Logger; import com.profiler.config.TomcatProfilerConfig; import com.profiler.dto.AgentInfoDTO; -import com.profiler.logging.Logger; public class AgentInfoSender extends Thread { - private static final Logger logger = Logger.getLogger(AgentInfoSender.class); + private final Logger logger = Logger.getLogger(AgentInfoSender.class.getName()); boolean isAgentStart; @@ -34,15 +35,21 @@ public class AgentInfoSender extends Thread { ObjectOutputStream stream = new ObjectOutputStream(requestSocket.getOutputStream()); AgentInfoDTO dto = new AgentInfoDTO(); dto.setIsDead(); - - logger.info("send agent stop info. %s", dto.toString()); + if (logger.isLoggable(Level.INFO)) { + logger.info("send agent stop info. " + dto.toString()); + } stream.writeObject(dto); stream.close(); - logger.info("Agent Stopped message is sent. %s", dto.toString()); + if (logger.isLoggable(Level.INFO)){ + logger.info("Agent Stopped message is sent. " + dto.toString()); + } + } catch (Exception e) { - logger.error("AgentInfoSender Exception occured : %s", e.getMessage()); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, "AgentInfoSender Exception occured:" + e.getMessage(), e); + } } finally { closeSocket(); } @@ -66,9 +73,12 @@ public class AgentInfoSender extends Thread { AgentInfoDTO dto = new AgentInfoDTO(); - logger.info("send agent startup info. %s", dto.toString()); + if (logger.isLoggable(Level.INFO)) { + logger.info("send agent startup info. " + dto.toString()); + } - stream.writeObject(dto); + + stream.writeObject(dto); stream.close(); } catch (Exception e) { e.printStackTrace(); @@ -80,17 +90,27 @@ public class AgentInfoSender extends Thread { private boolean connectToServer() { try { - logger.info("Trying to connect server. %s:%s", TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); + if (logger.isLoggable(Level.INFO)) { + logger.info("Trying to connect server. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); + } + requestSocket = new Socket(TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); + // TODO timeout 처리가 없음. api를 변경해야 될듯. + if (logger.isLoggable(Level.INFO)) { + logger.info("Connected to server. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); + } - requestSocket = new Socket(TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); - - logger.info("Connected to server. %s:%s", TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); - return false; + return false; } catch (java.net.ConnectException ce) { - logger.fatal("Connect to TomcatProfiler server is failed. %s:%s", TomcatProfilerConfig.SERVER_IP, TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT); - return true; + + if (logger.isLoggable(Level.SEVERE)) { + logger.log(Level.SEVERE, "Connect to TomcatProfiler server is failed. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT, ce); + } + + return true; } catch (Exception e) { - e.printStackTrace(); + if (logger.isLoggable(Level.SEVERE)) { + logger.log(Level.SEVERE, "Connect to TomcatProfiler server is failed. " + TomcatProfilerConfig.SERVER_IP + ":" + TomcatProfilerConfig.SERVER_TCP_LISTEN_PORT, e); + } return true; } } @@ -100,7 +120,9 @@ public class AgentInfoSender extends Thread { requestSocket.close(); logger.info("TCP RequestSocket is closed"); } catch (Exception e) { - logger.error("closeSocket(). %s", e.getMessage()); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, "closeSocket(). " + e.getMessage(), e); + } } } } diff --git a/src/main/java/com/profiler/trace/RequestDataTracer.java b/src/main/java/com/profiler/trace/RequestDataTracer.java index c8d4afff0..7805568f6 100644 --- a/src/main/java/com/profiler/trace/RequestDataTracer.java +++ b/src/main/java/com/profiler/trace/RequestDataTracer.java @@ -17,171 +17,185 @@ import com.profiler.dto.RequestDataThriftDTO; import com.profiler.util.QueryStringUtil; public class RequestDataTracer { - private static Set sqlSet=null; - private static Hashtable dbConnectionURL=new Hashtable(); - static { - if(TomcatProfilerConfig.QUERY_COUNT_OVER_10000) { - sqlSet=new CopyOnWriteArraySet(); - } else { - sqlSet=new HashSet(1024); - } - } - private static final ThreadLocal requestDataThreadLocal=new ThreadLocal(); - private static final ThreadLocal> sqlParamMapThreadLocal=new ThreadLocal>(); - - /** - * These two variables are used counting "ResultSet.next()" times. - */ - private static final ThreadLocal fetchCountThreadLocal=new ThreadLocal(); - private static final ThreadLocal totalFetchCountThreadLocal=new ThreadLocal(); - public static RequestDataListThriftDTO getRequestDataList() { - return requestDataThreadLocal.get(); - } - public static void removeRequestDataList() { - requestDataThreadLocal.remove(); - } - private static boolean isRequestData() { - Integer reqHashCode=RequestTransactionTracer.getRequestHashCode(); - if(reqHashCode==null) { - return false; - } else { - return true; - } - } + private static Set sqlSet = null; + private static Hashtable dbConnectionURL = new Hashtable(); - /** - * Put data to requestDataThreadLocal. - * @param dataType - */ - public static void put(int dataType) { + static { + if (TomcatProfilerConfig.QUERY_COUNT_OVER_10000) { + sqlSet = new CopyOnWriteArraySet(); + } else { + sqlSet = new HashSet(1024); + } + } + + private static final ThreadLocal requestDataThreadLocal = new ThreadLocal(); + private static final ThreadLocal> sqlParamMapThreadLocal = new ThreadLocal>(); + + /** + * These two variables are used counting "ResultSet.next()" times. + */ + private static final ThreadLocal fetchCountThreadLocal = new ThreadLocal(); + private static final ThreadLocal totalFetchCountThreadLocal = new ThreadLocal(); + + public static RequestDataListThriftDTO getRequestDataList() { + return requestDataThreadLocal.get(); + } + + public static void removeRequestDataList() { + requestDataThreadLocal.remove(); + } + + private static boolean isRequestData() { + Integer reqHashCode = RequestTransactionTracer.getRequestHashCode(); + if (reqHashCode == null) { + return false; + } else { + return true; + } + } + + /** + * Put data to requestDataThreadLocal. + * + * @param dataType + */ + public static void put(int dataType) { // System.out.println(dataType+"-----RequestHashCode="+RequestTransactionTracer.getRequestHashCode()); - if(isRequestData()) { - RequestDataListThriftDTO dto=requestDataThreadLocal.get(); - dto=checkDTO(dto); - List list=dto.getRequestDataList(); - // System.out.println("-----RequestDataListThriftDTO list size="+list.size()); - - checkSqlParamMap(list); - - RequestDataThriftDTO dataDto=new RequestDataThriftDTO(dataType,System.currentTimeMillis()); - list.add(dataDto); - requestDataThreadLocal.set(dto); - } - } - - /** - * Put Connection data to requestDataThreadLocal. - * @param dataType - */ - public static void putConnection(int dataType,String url) { + if (isRequestData()) { + RequestDataListThriftDTO dto = requestDataThreadLocal.get(); + dto = checkDTO(dto); + List list = dto.getRequestDataList(); + // System.out.println("-----RequestDataListThriftDTO list size="+list.size()); + + checkSqlParamMap(list); + + RequestDataThriftDTO dataDto = new RequestDataThriftDTO(dataType, System.currentTimeMillis()); + list.add(dataDto); + requestDataThreadLocal.set(dto); + } + } + + /** + * Put Connection data to requestDataThreadLocal. + * + * @param dataType + */ + public static void putConnection(int dataType, String url) { // System.out.println(dataType+"-----RequestHashCode="+RequestTransactionTracer.getRequestHashCode()); - if(isRequestData()) { - RequestDataListThriftDTO dto=requestDataThreadLocal.get(); - dto=checkDTO(dto); - List list=dto.getRequestDataList(); - // System.out.println("-----RequestDataListThriftDTO list size="+list.size()); - - checkSqlParamMap(list); - - 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); + if (isRequestData()) { + RequestDataListThriftDTO dto = requestDataThreadLocal.get(); + dto = checkDTO(dto); + List list = dto.getRequestDataList(); + // System.out.println("-----RequestDataListThriftDTO list size="+list.size()); + + checkSqlParamMap(list); + + 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); - } - dataDto.setDataHashCode(hashCode); - } - list.add(dataDto); - requestDataThreadLocal.set(dto); - } - } - /** - * Put SQL Query data into requestDataThreadLocal. - * @param dataType - */ - public static void putSqlQuery(int dataType,String data) { - if(isRequestData()) { - RequestDataListThriftDTO dto=requestDataThreadLocal.get(); - dto=checkDTO(dto); - List list=dto.getRequestDataList(); - // System.out.println("-----RequestDataListThriftDTO list size="+list.size()); - - checkSqlParamMap(list); - - RequestDataThriftDTO dataDto=new RequestDataThriftDTO(dataType,System.currentTimeMillis()); - int dataHashCode=data.hashCode(); - dataDto.setDataHashCode(dataHashCode); - boolean isAlreadySent=checkHashCode(dataHashCode); - if(!isAlreadySent) { - if(data!=null) { - dataDto.setDataString(QueryStringUtil.removeAllMultiSpace(data)); - } - } - list.add(dataDto); - requestDataThreadLocal.set(dto); - } - } - /** - * Check SQL Query HashCode set. - * If Query count is over 10000, it can make memory problem. - * So this method removes 100 hashCode. - * - * If you use HashSet this remove code will not run. - * - * @param dataHashCode - * @return - */ - private static boolean checkHashCode(int dataHashCode) { - if(TomcatProfilerConfig.QUERY_COUNT_OVER_10000) { - //If sqlSet is CopyOnWriteArraySet, it removes data. - if(sqlSet.size()>10000) { - Iterator iterator=sqlSet.iterator(); - for(int loop=0;loop<100;loop++) { - sqlSet.remove(iterator.next()); - } - } - } - if(sqlSet.contains(dataHashCode)) { - return true; - } else { - sqlSet.add(dataHashCode); - return false; - } - } - /** - * Manage sql param list - * @param list - */ - private static void checkSqlParamMap(List list) { - if(isRequestData()) { - HashMap map=sqlParamMapThreadLocal.get(); - if(map!=null) { - int mapSize=map.size(); - StringBuilder params=new StringBuilder(); - for(int loop=1;loop<=mapSize;loop++) { - params.append(map.get(loop)).append(","); - } - - RequestDataThriftDTO dataDto=new RequestDataThriftDTO(TomcatProfilerConstant.REQ_DATA_TYPE_DB_PREPARED_STATEMENT_PARAM,System.currentTimeMillis()); - dataDto.setDataString(params.toString()); - list.add(dataDto); - } - sqlParamMapThreadLocal.remove(); - } - } - /** - * Add sql parameter - * @param sequence - * @param data - */ - public static void putSqlParam(int sequence,String data) { - if(isRequestData()) { - HashMap map=sqlParamMapThreadLocal.get(); - if(map==null) { - map=new HashMap(); - } + } + dataDto.setDataHashCode(hashCode); + } + list.add(dataDto); + requestDataThreadLocal.set(dto); + } + } + + /** + * Put SQL Query data into requestDataThreadLocal. + * + * @param dataType + */ + public static void putSqlQuery(int dataType, String data) { + if (isRequestData()) { + RequestDataListThriftDTO dto = requestDataThreadLocal.get(); + dto = checkDTO(dto); + List list = dto.getRequestDataList(); + // System.out.println("-----RequestDataListThriftDTO list size="+list.size()); + + checkSqlParamMap(list); + + RequestDataThriftDTO dataDto = new RequestDataThriftDTO(dataType, System.currentTimeMillis()); + int dataHashCode = data.hashCode(); + dataDto.setDataHashCode(dataHashCode); + boolean isAlreadySent = checkHashCode(dataHashCode); + if (!isAlreadySent) { + if (data != null) { + dataDto.setDataString(QueryStringUtil.removeAllMultiSpace(data)); + } + } + list.add(dataDto); + requestDataThreadLocal.set(dto); + } + } + + /** + * Check SQL Query HashCode set. + * If Query count is over 10000, it can make memory problem. + * So this method removes 100 hashCode. + *

+ * If you use HashSet this remove code will not run. + * + * @param dataHashCode + * @return + */ + private static boolean checkHashCode(int dataHashCode) { + if (TomcatProfilerConfig.QUERY_COUNT_OVER_10000) { + //If sqlSet is CopyOnWriteArraySet, it removes data. + if (sqlSet.size() > 10000) { + Iterator iterator = sqlSet.iterator(); + for (int loop = 0; loop < 100; loop++) { + sqlSet.remove(iterator.next()); + } + } + } + if (sqlSet.contains(dataHashCode)) { + return true; + } else { + sqlSet.add(dataHashCode); + return false; + } + } + + /** + * Manage sql param list + * + * @param list + */ + private static void checkSqlParamMap(List list) { + if (isRequestData()) { + HashMap map = sqlParamMapThreadLocal.get(); + if (map != null) { + int mapSize = map.size(); + StringBuilder params = new StringBuilder(); + for (int loop = 1; loop <= mapSize; loop++) { + params.append(map.get(loop)).append(","); + } + + RequestDataThriftDTO dataDto = new RequestDataThriftDTO(TomcatProfilerConstant.REQ_DATA_TYPE_DB_PREPARED_STATEMENT_PARAM, System.currentTimeMillis()); + dataDto.setDataString(params.toString()); + list.add(dataDto); + } + sqlParamMapThreadLocal.remove(); + } + } + + /** + * Add sql parameter + * + * @param sequence + * @param data + */ + public static void putSqlParam(int sequence, String data) { + if (isRequestData()) { + HashMap map = sqlParamMapThreadLocal.get(); + if (map == null) { + map = new HashMap(); + } // if(data!=null) { // try { // System.out.print("Before="+data); @@ -209,86 +223,92 @@ public class RequestDataTracer { // e.printStackTrace(); // } // } - map.put(sequence,data); - sqlParamMapThreadLocal.set(map); - } - } - public static void putSqlParam(int sequence,byte[] data) { - putSqlParam(sequence,new String(data)); - } - public static void putSqlParam(int sequence,Object data) { - if(data!=null) { - putSqlParam(sequence,data.toString()); - } else { - putSqlParam(sequence,"null"); - } - } - /** - * Check RequestDataListThriftDTO is null. - * If this object is null, current request called this Class first time. - * So it make RequestDataListThriftDTO object. - * @param dto - * @return - */ - private static RequestDataListThriftDTO checkDTO(RequestDataListThriftDTO dto) { - if(dto==null) { -// System.out.println("dto=null"); - dto=new RequestDataListThriftDTO(AgentInfoDTO.staticHostHashCode,RequestTransactionTracer.getRequestHashCode(),new ArrayList()); - } - return dto; - } - /** - * add ResultSet.next() method call count. - */ - public static void updateFetchCount() { - Integer totalFetchCount=totalFetchCountThreadLocal.get(); - Integer fetchCount=fetchCountThreadLocal.get(); - if(totalFetchCount==null) { - totalFetchCountThreadLocal.set(0); - } - if(fetchCount==null) { - fetchCountThreadLocal.set(0); - } - totalFetchCountThreadLocal.set(totalFetchCountThreadLocal.get()+1); - fetchCountThreadLocal.set(fetchCountThreadLocal.get()+1); - } + map.put(sequence, data); + sqlParamMapThreadLocal.set(map); + } + } - /** - * Before transaction end, removes current thread's fetch count data. - */ - public static void removeFetchCount() { - totalFetchCountThreadLocal.remove(); - fetchCountThreadLocal.remove(); - } - /** - * If ResultSet.close() method is called, - * this method is called. - */ - public static void addResultSetData() { - if(isRequestData()) { - //set data fetch count - Integer fetchCount=fetchCountThreadLocal.get(); - if(fetchCount!=null) { - Integer totalFetchCount=totalFetchCountThreadLocal.get(); - fetchCountThreadLocal.remove(); - - RequestDataListThriftDTO dto=requestDataThreadLocal.get(); - dto=checkDTO(dto); - List list=dto.getRequestDataList(); - int listSize=list.size(); - RequestDataThriftDTO previousDTO=list.get(listSize-1); - if(previousDTO.getDataType()!=TomcatProfilerConstant.REQ_DATA_TYPE_DB_FETCH) { - RequestDataThriftDTO dataDto=new RequestDataThriftDTO(TomcatProfilerConstant.REQ_DATA_TYPE_DB_FETCH,System.currentTimeMillis()); - dataDto.setExtraInt1(fetchCount); - dataDto.setExtraInt2(totalFetchCount); - list.add(dataDto); - } else { - //Because of MS SQL. - int previousTotalFetchCount=previousDTO.getExtraInt2(); - totalFetchCountThreadLocal.set(previousTotalFetchCount); - } - requestDataThreadLocal.set(dto); - } - } - } + public static void putSqlParam(int sequence, byte[] data) { + putSqlParam(sequence, new String(data)); + } + + public static void putSqlParam(int sequence, Object data) { + if (data != null) { + putSqlParam(sequence, data.toString()); + } else { + putSqlParam(sequence, "null"); + } + } + + /** + * Check RequestDataListThriftDTO is null. + * If this object is null, current request called this Class first time. + * So it make RequestDataListThriftDTO object. + * + * @param dto + * @return + */ + private static RequestDataListThriftDTO checkDTO(RequestDataListThriftDTO dto) { + if (dto == null) { +// System.out.println("dto=null"); + dto = new RequestDataListThriftDTO(AgentInfoDTO.staticHostHashCode, RequestTransactionTracer.getRequestHashCode(), new ArrayList()); + } + return dto; + } + + /** + * add ResultSet.next() method call count. + */ + public static void updateFetchCount() { + Integer totalFetchCount = totalFetchCountThreadLocal.get(); + Integer fetchCount = fetchCountThreadLocal.get(); + if (totalFetchCount == null) { + totalFetchCountThreadLocal.set(0); + } + if (fetchCount == null) { + fetchCountThreadLocal.set(0); + } + totalFetchCountThreadLocal.set(totalFetchCountThreadLocal.get() + 1); + fetchCountThreadLocal.set(fetchCountThreadLocal.get() + 1); + } + + /** + * Before transaction end, removes current thread's fetch count data. + */ + public static void removeFetchCount() { + totalFetchCountThreadLocal.remove(); + fetchCountThreadLocal.remove(); + } + + /** + * If ResultSet.close() method is called, + * this method is called. + */ + public static void addResultSetData() { + if (isRequestData()) { + //set data fetch count + Integer fetchCount = fetchCountThreadLocal.get(); + if (fetchCount != null) { + Integer totalFetchCount = totalFetchCountThreadLocal.get(); + fetchCountThreadLocal.remove(); + + RequestDataListThriftDTO dto = requestDataThreadLocal.get(); + dto = checkDTO(dto); + List list = dto.getRequestDataList(); + int listSize = list.size(); + RequestDataThriftDTO previousDTO = list.get(listSize - 1); + if (previousDTO.getDataType() != TomcatProfilerConstant.REQ_DATA_TYPE_DB_FETCH) { + RequestDataThriftDTO dataDto = new RequestDataThriftDTO(TomcatProfilerConstant.REQ_DATA_TYPE_DB_FETCH, System.currentTimeMillis()); + dataDto.setExtraInt1(fetchCount); + dataDto.setExtraInt2(totalFetchCount); + list.add(dataDto); + } else { + //Because of MS SQL. + int previousTotalFetchCount = previousDTO.getExtraInt2(); + totalFetchCountThreadLocal.set(previousTotalFetchCount); + } + requestDataThreadLocal.set(dto); + } + } + } } diff --git a/src/main/java/com/profiler/trace/RequestTransactionTracer.java b/src/main/java/com/profiler/trace/RequestTransactionTracer.java index 1edc58fed..cc6e7510d 100644 --- a/src/main/java/com/profiler/trace/RequestTransactionTracer.java +++ b/src/main/java/com/profiler/trace/RequestTransactionTracer.java @@ -12,99 +12,109 @@ import com.profiler.sender.RequestDataSender; import com.profiler.sender.RequestTransactionDataSender; public class RequestTransactionTracer extends AbstractTracer { -// private static Hashtable requestTable=new Hashtable(); - private static Set requestSet=null; - static{ - requestSet=Collections.synchronizedSet(new HashSet()); - } + // private static Hashtable requestTable=new Hashtable(); + private static Set requestSet = null; - public RequestTransactionTracer() { - } - private static final ThreadLocal requestID=new ThreadLocal(); - private static final ThreadLocal requestHashCode=new ThreadLocal(); - public static Integer getRequestHashCode() { - return requestHashCode.get(); - } - public static void startTransaction(String requestURL,String clientIP,long requestTime,StringBuilder params) { + static { + + requestSet = Collections.synchronizedSet(new HashSet()); + } + + public RequestTransactionTracer() { + } + + private static final ThreadLocal requestID = new ThreadLocal(); + private static final ThreadLocal requestHashCode = new ThreadLocal(); + + public static Integer getRequestHashCode() { + return requestHashCode.get(); + } + + public static void startTransaction(String requestURL, String clientIP, long requestTime, StringBuilder params) { // printStackTrace(); // long cpuUserTime[]=getThreadTime(); - long cpuUserTime[]=new long[2]; - - String currentThreadName=Thread.currentThread().getName(); - //### set Thread id with thread local - String tempRequestID=currentThreadName+"_"+System.nanoTime(); - requestID.set(tempRequestID); - int tempRequestHashCode=tempRequestID.hashCode(); - requestHashCode.set(tempRequestHashCode); - RequestThriftDTO dto=new RequestThriftDTO(AgentInfoDTO.staticHostHashCode,tempRequestHashCode,TomcatProfilerConstant.DATA_TYPE_REQUEST,requestTime,cpuUserTime[0],cpuUserTime[1]); - dto.setClientIP(clientIP); - dto.setRequestURL(requestURL); - int paramsLength=params.length(); - if(paramsLength>0) { - params.deleteCharAt(paramsLength-1); - dto.setExtraData1(params.toString()); - } - requestSet.add(requestID.get()); - RequestTransactionDataSender sender=new RequestTransactionDataSender(dto); - sender.send(); - } - /** - * Transaction is successfully ended. - */ - public static void endTransaction() { + long cpuUserTime[] = new long[2]; + + String currentThreadName = Thread.currentThread().getName(); + //### set Thread id with thread local + String tempRequestID = currentThreadName + "_" + System.nanoTime(); + requestID.set(tempRequestID); + int tempRequestHashCode = tempRequestID.hashCode(); + requestHashCode.set(tempRequestHashCode); + RequestThriftDTO dto = new RequestThriftDTO(AgentInfoDTO.staticHostHashCode, tempRequestHashCode, TomcatProfilerConstant.DATA_TYPE_REQUEST, requestTime, cpuUserTime[0], cpuUserTime[1]); + dto.setClientIP(clientIP); + dto.setRequestURL(requestURL); + int paramsLength = params.length(); + if (paramsLength > 0) { + params.deleteCharAt(paramsLength - 1); + dto.setExtraData1(params.toString()); + } + requestSet.add(requestID.get()); + RequestTransactionDataSender sender = new RequestTransactionDataSender(dto); + sender.send(); + } + + /** + * Transaction is successfully ended. + */ + public static void endTransaction() { // long cpuUserTime[]=getThreadTime(); - long cpuUserTime[]=new long[2]; - RequestThriftDTO dto=new RequestThriftDTO(AgentInfoDTO.staticHostHashCode,requestHashCode.get(),TomcatProfilerConstant.DATA_TYPE_RESPONSE,System.currentTimeMillis(),cpuUserTime[0],cpuUserTime[1]); - - finishTransaction(dto); - } - /** - * There was an Exception processing transaction. - * @param throwable - */ - public static void exceptionTransaction(Throwable throwable) { + long cpuUserTime[] = new long[2]; + RequestThriftDTO dto = new RequestThriftDTO(AgentInfoDTO.staticHostHashCode, requestHashCode.get(), TomcatProfilerConstant.DATA_TYPE_RESPONSE, System.currentTimeMillis(), cpuUserTime[0], cpuUserTime[1]); + + finishTransaction(dto); + } + + /** + * There was an Exception processing transaction. + * + * @param throwable + */ + public static void exceptionTransaction(Throwable throwable) { // long cpuUserTime[]=getThreadTime(); - long cpuUserTime[]=new long[2]; - RequestThriftDTO dto=new RequestThriftDTO(AgentInfoDTO.staticHostHashCode,requestHashCode.get(),TomcatProfilerConstant.DATA_TYPE_UNCAUGHT_EXCEPTION,System.currentTimeMillis(),cpuUserTime[0],cpuUserTime[1]); - dto.setExtraData1(throwable.getMessage()); - StackTraceElement[] tempElement=throwable.getStackTrace(); - dto.setExtraData2(tempElement[0].toString()); - - finishTransaction(dto); - } - /** - * Transaction is ended and send request end data - * @param dto - */ - public static void finishTransaction(RequestThriftDTO dto) { - RequestDataListThriftDTO dataListDto=RequestDataTracer.getRequestDataList(); - if(dataListDto!=null) { - RequestDataSender dSender=new RequestDataSender(dataListDto); - dSender.send(); - } - RequestTransactionDataSender tSender=new RequestTransactionDataSender(dto); - tSender.send(); - - requestSet.remove(requestID.get()); - RequestDataTracer.removeRequestDataList(); - - RequestDataTracer.removeFetchCount(); - } - - public static int getActiveThreadCount() { - return requestSet.size(); - } - /* If every time call Thread's CPU time - * it affect to TPS and CPU usage. - * It is one of bottle neck. - public static long[] getThreadTime() { - long result[]=new long[2]; - - ThreadMXBean bean=ManagementFactory.getThreadMXBean(); -// System.out.println(Thread.currentThread().getName()+" CPU:"+bean.getCurrentThreadCpuTime()+" User:"+bean.getCurrentThreadUserTime()); - result[0]=bean.getCurrentThreadCpuTime(); - result[1]=bean.getCurrentThreadUserTime(); - return result; - } - */ + long cpuUserTime[] = new long[2]; + RequestThriftDTO dto = new RequestThriftDTO(AgentInfoDTO.staticHostHashCode, requestHashCode.get(), TomcatProfilerConstant.DATA_TYPE_UNCAUGHT_EXCEPTION, System.currentTimeMillis(), cpuUserTime[0], cpuUserTime[1]); + dto.setExtraData1(throwable.getMessage()); + StackTraceElement[] tempElement = throwable.getStackTrace(); + dto.setExtraData2(tempElement[0].toString()); + + finishTransaction(dto); + } + + /** + * Transaction is ended and send request end data + * + * @param dto + */ + public static void finishTransaction(RequestThriftDTO dto) { + RequestDataListThriftDTO dataListDto = RequestDataTracer.getRequestDataList(); + if (dataListDto != null) { + RequestDataSender dSender = new RequestDataSender(dataListDto); + dSender.send(); + } + RequestTransactionDataSender tSender = new RequestTransactionDataSender(dto); + tSender.send(); + + requestSet.remove(requestID.get()); + RequestDataTracer.removeRequestDataList(); + + RequestDataTracer.removeFetchCount(); + } + + public static int getActiveThreadCount() { + return requestSet.size(); + } + /* If every time call Thread's CPU time + * it affect to TPS and CPU usage. + * It is one of bottle neck. + public static long[] getThreadTime() { + long result[]=new long[2]; + + ThreadMXBean bean=ManagementFactory.getThreadMXBean(); + // System.out.println(Thread.currentThread().getName()+" CPU:"+bean.getCurrentThreadCpuTime()+" User:"+bean.getCurrentThreadUserTime()); + result[0]=bean.getCurrentThreadCpuTime(); + result[1]=bean.getCurrentThreadUserTime(); + return result; + } + */ } diff --git a/src/main/java/com/profiler/util/ByteCodeUtil.java b/src/main/java/com/profiler/util/ByteCodeUtil.java index 04f6b8a57..bfe4401e6 100644 --- a/src/main/java/com/profiler/util/ByteCodeUtil.java +++ b/src/main/java/com/profiler/util/ByteCodeUtil.java @@ -1,32 +1,41 @@ package com.profiler.util; -import com.profiler.logging.Logger; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javassist.CtMethod; +import java.util.logging.Level; +import java.util.logging.Logger; + public class ByteCodeUtil { // TODO logger 를 별도로 써야 되는지 않는지 검토. - private static final Logger logger = Logger.getLogger(ByteCodeUtil.class); + private static final Logger logger = Logger.getLogger(ByteCodeUtil.class.getName()); public static void printClassInfo(ClassPool classPool, String className) { - logger.debug("Printing Class Info of [" + className + "]"); - try { - logger.debug("try"); - String javaassistClassName = className.replace('/', '.'); - logger.debug("replace"); - CtClass cc = classPool.get(javaassistClassName); - logger.debug("ClassName:" + javaassistClassName); - CtConstructor[] constructorList = cc.getConstructors(); + if (!logger.isLoggable(Level.FINE)) { + return; + } + logger.fine("Printing Class Info of [" + className + "]"); + try { + logger.fine("try"); + + String javaassistClassName = className.replace('/', '.'); + logger.fine("replace"); + + CtClass cc = classPool.get(javaassistClassName); + logger.fine("ClassName:" + javaassistClassName); + + CtConstructor[] constructorList = cc.getConstructors(); for (CtConstructor cons : constructorList) { try { String signature = cons.getSignature(); - logger.info("Constructor signature:%s", signature); - } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + logger.info("Constructor signature:" + signature); + } catch (Exception e) { + if(logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } } @@ -36,27 +45,27 @@ public class ByteCodeUtil { try { String methodName = tempMethod.getLongName(); - logger.debug("MethodName:" + methodName); + logger.fine("MethodName:" + methodName); CtClass[] params = tempMethod.getParameterTypes(); if (params.length != 0) { int paramsLength = params.length; for (int loop = paramsLength - 1; loop > 0; loop--) { - logger.debug("Param" + loop + ":" + params[loop].getName()); + logger.fine("Param" + loop + ":" + params[loop].getName()); } } else { - logger.debug(" No params"); - } - - logger.debug("ReturnType=" + tempMethod.getReturnType().getName()); + logger.fine(" No params"); + } + logger.fine("ReturnType=" + tempMethod.getReturnType().getName()); } catch (Exception methodException) { - logger.error("Exception : " + methodException.getMessage()); + logger.log(Level.WARNING, "Exception :" + methodException.getMessage(), methodException); } } } catch (Exception e) { - logger.error(e.getMessage()); - e.printStackTrace(); + if (logger.isLoggable(Level.WARNING)) { + logger.log(Level.WARNING, e.getMessage(), e); + } } } } diff --git a/src/test/java/com/profiller/logger/JdkLogger.java b/src/test/java/com/profiller/logger/JdkLogger.java new file mode 100644 index 000000000..6cb70e688 --- /dev/null +++ b/src/test/java/com/profiller/logger/JdkLogger.java @@ -0,0 +1,18 @@ +package com.profiller.logger; + +import org.junit.Test; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class JdkLogger { + @Test + public void test() { + Logger logger = Logger.getLogger(this.getClass().getName()); + logger.info("tset"); + logger.log(Level.INFO, "Test %s", "sdfsdf"); + + logger.log(Level.INFO, "Test ", new Exception()); + logger.logp(Level.INFO, JdkLogger.class.getName(), "test()", "tsdd"); + } +}