diff --git a/pom.xml b/pom.xml
index 3bf61e068d..fe5e2d8895 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.alibaba
druid
- 0.2.10
+ 0.2.11-SNAPSHOT
jar
druid
diff --git a/src/main/java/com/alibaba/druid/VERSION.java b/src/main/java/com/alibaba/druid/VERSION.java
index 0b66659c36..4f63632830 100644
--- a/src/main/java/com/alibaba/druid/VERSION.java
+++ b/src/main/java/com/alibaba/druid/VERSION.java
@@ -19,7 +19,7 @@ public final class VERSION {
public final static int MajorVersion = 0;
public final static int MinorVersion = 2;
- public final static int RevisionVersion = 10;
+ public final static int RevisionVersion = 11;
public static String getVersionNumber() {
return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion;
diff --git a/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java b/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java
index df9f175127..043bd006e4 100644
--- a/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java
+++ b/src/main/java/com/alibaba/druid/filter/logging/LogFilter.java
@@ -19,6 +19,9 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Savepoint;
import java.sql.Types;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import com.alibaba.druid.filter.FilterChain;
import com.alibaba.druid.filter.FilterEventAdapter;
@@ -31,6 +34,7 @@ import com.alibaba.druid.proxy.jdbc.JdbcParameter;
import com.alibaba.druid.proxy.jdbc.PreparedStatementProxy;
import com.alibaba.druid.proxy.jdbc.ResultSetProxy;
import com.alibaba.druid.proxy.jdbc.StatementProxy;
+import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.util.JdbcUtils;
/**
@@ -57,6 +61,7 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
private boolean statementExecuteQueryAfterLogEnable = true;
private boolean statementExecuteUpdateAfterLogEnable = true;
private boolean statementExecuteBatchAfterLogEnable = true;
+ private boolean statementExecutableSqlLogEnable = false;
private boolean statementCloseAfterLogEnable = true;
@@ -89,6 +94,12 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
resultSetLogEnabled = false;
}
}
+ {
+ String prop = System.getProperty("druid.log.stmt.executableSql");
+ if (prop == "true") {
+ statementExecutableSqlLogEnable = true;
+ }
+ }
}
@Override
@@ -224,6 +235,14 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
this.statementExecuteUpdateAfterLogEnable = afterStatementExecuteUpdateLogEnable;
}
+ public boolean isStatementExecutableSqlLogEnable() {
+ return statementExecutableSqlLogEnable;
+ }
+
+ public void setStatementExecutableSqlLogEnable(boolean statementExecutableSqlLogEnable) {
+ this.statementExecutableSqlLogEnable = statementExecutableSqlLogEnable;
+ }
+
public boolean isStatementPrepareCallAfterLogEnabled() {
return isStatementLogEnabled() && statementPrepareCallAfterLogEnable;
}
@@ -392,6 +411,8 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
@Override
protected void statementExecuteAfter(StatementProxy statement, String sql, boolean firstResult) {
+ logExecutableSql(statement, sql);
+
if (statementExecuteAfterLogEnable && isStatementLogEnabled()) {
statement.setLastExecuteTimeNano();
double nanos = statement.getLastExecuteTimeNano();
@@ -409,18 +430,20 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
@Override
protected void statementExecuteBatchAfter(StatementProxy statement, int[] result) {
+ String sql;
+ if (statement instanceof PreparedStatementProxy) {
+ sql = ((PreparedStatementProxy) statement).getSql();
+ } else {
+ sql = statement.getBatchSql();
+ }
+
+ logExecutableSql(statement, sql);
+
if (statementExecuteBatchAfterLogEnable && isStatementLogEnabled()) {
statement.setLastExecuteTimeNano();
double nanos = statement.getLastExecuteTimeNano();
double millis = nanos / (1000 * 1000);
- String sql;
- if (statement instanceof PreparedStatementProxy) {
- sql = ((PreparedStatementProxy) statement).getSql();
- } else {
- sql = statement.getBatchSql();
- }
-
statementLog("{conn-" + statement.getConnectionProxy().getId() + ", " + stmtId(statement)
+ "} batch executed. " + millis + " millis. " + sql);
}
@@ -436,6 +459,8 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
@Override
protected void statementExecuteQueryAfter(StatementProxy statement, String sql, ResultSetProxy resultSet) {
+ logExecutableSql(statement, sql);
+
if (statementExecuteQueryAfterLogEnable && isStatementLogEnabled()) {
statement.setLastExecuteTimeNano();
double nanos = statement.getLastExecuteTimeNano();
@@ -456,6 +481,8 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
@Override
protected void statementExecuteUpdateAfter(StatementProxy statement, String sql, int updateCount) {
+ logExecutableSql(statement, sql);
+
if (statementExecuteUpdateAfterLogEnable && isStatementLogEnabled()) {
statement.setLastExecuteTimeNano();
double nanos = statement.getLastExecuteTimeNano();
@@ -466,6 +493,29 @@ public abstract class LogFilter extends FilterEventAdapter implements LogFilterM
}
}
+ private void logExecutableSql(StatementProxy statement, String sql) {
+ if (!isStatementExecutableSqlLogEnable()) {
+ return;
+ }
+
+ Map parameterMap = statement.getParameters();
+ if (parameterMap == null || parameterMap.size() == 0) {
+ statementLog("{conn-" + statement.getConnectionProxy().getId() + ", " + stmtId(statement) + "} executed. "
+ + sql);
+ return;
+ }
+
+ List