refactor StatFilter buildSlowParameters

This commit is contained in:
wenshao
2012-08-23 07:57:42 +08:00
parent 1b77dfda43
commit 31e4abd71f
3 changed files with 55 additions and 56 deletions
@@ -47,6 +47,7 @@ import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.JdbcStatContext;
import com.alibaba.druid.stat.JdbcStatManager;
import com.alibaba.druid.stat.JdbcStatementStat;
import com.alibaba.druid.support.json.JSONWriter;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
@@ -456,12 +457,12 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
long millis = nanoSpan / (1000 * 1000);
if (millis >= slowSqlMillis) {
StringBuilder buf = buildSlowParameters(statement);
sqlStat.setLastSlowParameters(buf.toString());
String slowParameters = buildSlowParameters(statement);
sqlStat.setLastSlowParameters(slowParameters);
if (logSlowSql) {
LOG.error("slow sql " + millis + " millis. \n" + statement.getLastExecuteSql() + "\n"
+ buf.toString());
+ slowParameters);
}
}
}
@@ -497,70 +498,48 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
StatFilterContext.getInstance().executeAfter(sql, nanoSpan, error);
}
private StringBuilder buildSlowParameters(StatementProxy statement) {
StringBuilder buf = new StringBuilder();
buf.append('[');
private String buildSlowParameters(StatementProxy statement) {
JSONWriter out = new JSONWriter();
out.writeArrayStart();
int index = 0;
for (JdbcParameter parameter : statement.getParameters().values()) {
if (index != 0) {
buf.append(',');
out.writeComma();
}
Object value = parameter.getValue();
if (value == null) {
buf.append("null");
out.writeNull();
} else if (value instanceof String) {
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("...");
out.writeString(text.substring(0, 97) + "...");
} 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);
}
}
out.writeString(text);
}
buf.append('"');
} else if (value instanceof Number) {
buf.append(value.toString());
out.writeObject(value);
} else if (value instanceof java.util.Date) {
java.util.Date date = (java.util.Date) value;
buf.append(date.getClass().getSimpleName());
buf.append('(');
buf.append(date.getTime());
buf.append(')');
out.writeObject(value);
} else if (value instanceof Boolean) {
buf.append(value.toString());
out.writeObject(value);
} else if (value instanceof InputStream) {
buf.append("<InputStream>");
out.writeString("<InputStream>");
} else if (value instanceof Clob) {
buf.append("<Clob>");
out.writeString("<Clob>");
} else if (value instanceof NClob) {
buf.append("<NClob>");
out.writeString("<NClob>");
} else if (value instanceof Blob) {
buf.append("<Blob>");
out.writeString("<Blob>");
} else {
buf.append('<');
buf.append(value.getClass().getName());
buf.append('>');
out.writeString('<' + value.getClass().getName() + '>');
}
index++;
}
buf.append(']');
return buf;
out.writeArrayEnd();
return out.toString();
}
@Override
@@ -831,7 +810,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
private void clobOpenAfter(JdbcDataSourceStat dataSourceStat, StatementProxy stmt, ClobProxy clob) {
dataSourceStat.incrementClobOpenCount();
if (stmt != null) {
JdbcSqlStat sqlStat = stmt.getSqlStat();
if (sqlStat != null) {
@@ -36,6 +36,10 @@ public class ClobProxyImpl implements ClobProxy {
protected final DataSourceProxy dataSource;
public ClobProxyImpl(DataSourceProxy dataSource, ConnectionProxy connection, Clob clob){
if (clob == null) {
throw new IllegalArgumentException("clob is null");
}
this.dataSource = dataSource;
this.connection = connection;
this.clob = clob;
@@ -20,10 +20,26 @@ public class JSONWriter {
this.out = new StringBuilder();
}
public void writeArrayStart() {
write('[');
}
public void writeComma() {
write(',');
}
public void writeArrayEnd() {
write(']');
}
public void writeNull() {
write("null");
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public void writeObject(Object o) {
if (o == null) {
write("null");
writeNull();
return;
}
@@ -87,12 +103,12 @@ public class JSONWriter {
writeTabularData((TabularData) o);
return;
}
if (o instanceof CompositeData) {
writeCompositeData((CompositeData) o);
return;
}
if (o instanceof Map) {
writeMap((Map) o);
return;
@@ -103,7 +119,7 @@ public class JSONWriter {
public void writeDate(Date date) {
if (date == null) {
write("null");
writeNull();
return;
}
@@ -112,7 +128,7 @@ public class JSONWriter {
public void writeError(Throwable error) {
if (error == null) {
write("null");
writeNull();
return;
}
@@ -127,7 +143,7 @@ public class JSONWriter {
public void writeArray(Object[] array) {
if (array == null) {
write("null");
writeNull();
return;
}
@@ -145,7 +161,7 @@ public class JSONWriter {
public void writeArray(Collection<Object> list) {
if (list == null) {
write("null");
writeNull();
return;
}
@@ -184,7 +200,7 @@ public class JSONWriter {
public void writeTabularData(TabularData tabularData) {
if (tabularData == null) {
write("null");
writeNull();
return;
}
@@ -205,7 +221,7 @@ public class JSONWriter {
public void writeCompositeData(CompositeData compositeData) {
if (compositeData == null) {
write("null");
writeNull();
return;
}
@@ -228,7 +244,7 @@ public class JSONWriter {
public void writeMap(Map<String, Object> map) {
if (map == null) {
write("null");
writeNull();
return;
}