From e3fa87b37e6ccfb39886fcd414280e25c09d3786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Tue, 20 Mar 2012 04:56:12 +0800 Subject: [PATCH] self protected --- .../alibaba/druid/filter/stat/StatFilter.java | 61 ++++++++++++++----- .../com/alibaba/druid/stat/JdbcSqlStat.java | 10 +-- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 4fbf2ac83c..679017aa21 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -22,7 +22,6 @@ import java.sql.NClob; import java.sql.SQLException; import java.sql.Savepoint; import java.util.Date; -import java.util.Map; import java.util.Properties; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicLong; @@ -419,35 +418,69 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { long millis = nanoSpan / (1000 * 1000); if (millis >= slowSqlMillis) { - Map parameters = statement.getParameters(); - String[] lastSlowParameters = new String[parameters.size()]; + StringBuilder buf = new StringBuilder(); + buf.append('['); int index = 0; for (JdbcParameter parameter : statement.getParameters().values()) { + if (index != 0) { + buf.append(','); + } Object value = parameter.getValue(); if (value == null) { - lastSlowParameters[index] = "null"; + buf.append("null"); } else if (value instanceof String) { - lastSlowParameters[index] = "'" + value.toString() + "'"; + buf.append('"'); + String text = (String) value; + if (text.length() > 100) { + for (int i = 0; i < 97; ++i) { + char ch = text.charAt(i); + if (ch == '\'') { + buf.append('\\'); + buf.append(ch); + } else { + buf.append(ch); + } + } + buf.append("..."); + } else { + for (int i = 0; i < text.length(); ++i) { + char ch = text.charAt(i); + if (ch == '\'') { + buf.append('\\'); + buf.append(ch); + } else { + buf.append(ch); + } + } + } + buf.append('"'); } else if (value instanceof Number) { - lastSlowParameters[index] = value.toString(); + buf.append(value.toString()); } else if (value instanceof java.util.Date) { java.util.Date date = (java.util.Date) value; - lastSlowParameters[index] = date.getClass().getSimpleName() + "(" + date.getTime() + ")"; + buf.append(date.getClass().getSimpleName()); + buf.append('('); + buf.append(date.getTime()); + buf.append(')'); } else if (value instanceof Boolean) { - lastSlowParameters[index] = value.toString(); + buf.append(value.toString()); } else if (value instanceof InputStream) { - lastSlowParameters[index] = ""; + buf.append(""); } else if (value instanceof Clob) { - lastSlowParameters[index] = ""; + buf.append(""); } else if (value instanceof NClob) { - lastSlowParameters[index] = ""; + buf.append(""); } else if (value instanceof Blob) { - lastSlowParameters[index] = ""; + buf.append(""); } else { - lastSlowParameters[index] = "<" + value.getClass() + ">"; + buf.append('<'); + buf.append(value.getClass().getName()); + buf.append('>'); } + index++; } - sqlStat.setLastSlowParameters(lastSlowParameters); + buf.append(']'); + sqlStat.setLastSlowParameters(buf.toString()); } } diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index b6c5964965..77159bd6aa 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -64,7 +64,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { private final AtomicLong inTransactionCount = new AtomicLong(); - private String[] lastSlowParameters; + private String lastSlowParameters; private final Histogram histogram = new Histogram(new long[] { // // @@ -77,11 +77,11 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { this.sql = sql; } - public String[] getLastSlowParameters() { + public String getLastSlowParameters() { return lastSlowParameters; } - public void setLastSlowParameters(String[] lastSlowParameters) { + public void setLastSlowParameters(String lastSlowParameters) { this.lastSlowParameters = lastSlowParameters; } @@ -391,7 +391,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { // 25 - new ArrayType(SimpleType.LONG, true), // - new ArrayType(SimpleType.STRING, false), // + SimpleType.STRING, // }; String[] indexNames = { @@ -490,7 +490,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { map.put("InTransactionCount", getInTransactionCount()); map.put("Histogram", this.histogram.toArray()); - + map.put("LastSlowParameters", lastSlowParameters); return map;