iface) {
+ for (Filter filter : this.filters) {
+ if (filter.isWrapperFor(iface)) {
+ return (T) filter;
+ }
+ }
+
+ if (this.statLogger != null
+ && (this.statLogger.getClass() == iface || DruidDataSourceStatLogger.class == iface)) {
+ return (T) statLogger;
+ }
+
+ return super.unwrap(iface);
+ }
+
+ public boolean isLogDiffrentThread() {
+ return logDiffrentThread;
+ }
+
+ public void setLogDiffrentThread(boolean logDiffrentThread) {
+ this.logDiffrentThread = logDiffrentThread;
+ }
+}
diff --git a/src/main/java/com/alibaba/druid/util/JdbcConstants.java b/src/main/java/com/alibaba/druid/util/JdbcConstants.java
index f203e65ce2..0feecaad52 100644
--- a/src/main/java/com/alibaba/druid/util/JdbcConstants.java
+++ b/src/main/java/com/alibaba/druid/util/JdbcConstants.java
@@ -59,4 +59,10 @@ public interface JdbcConstants {
* 阿里云odps
*/
public static final String ODPS = "odps";
+
+ /**
+ * Log4JDBC
+ */
+ public static final String LOG4JDBC = "log4jdbc";
+ public static final String LOG4JDBC_DRIVER = "net.sf.log4jdbc.DriverSpy";
}
diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java
index 4521d3f5e0..765a2062b2 100644
--- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java
+++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java
@@ -351,6 +351,8 @@ public final class JdbcUtils implements JdbcConstants {
return "org.apache.derby.jdbc.EmbeddedDriver";
} else if (rawUrl.startsWith("jdbc:mysql:")) {
return MYSQL_DRIVER;
+ } else if (rawUrl.startsWith("jdbc:log4jdbc:")) {
+ return LOG4JDBC_DRIVER;
} else if (rawUrl.startsWith("jdbc:mariadb:")) {
return MARIADB_DRIVER;
} else if (rawUrl.startsWith("jdbc:oracle:") //
@@ -421,6 +423,8 @@ public final class JdbcUtils implements JdbcConstants {
return DERBY;
} else if (rawUrl.startsWith("jdbc:mysql:")) {
return MYSQL;
+ } else if (rawUrl.startsWith("jdbc:log4jdbc:")) {
+ return LOG4JDBC;
} else if (rawUrl.startsWith("jdbc:mariadb:")) {
return MARIADB;
} else if (rawUrl.startsWith("jdbc:oracle:")) {
diff --git a/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java b/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java
index 3bd6090c3d..401c45a0ff 100644
--- a/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java
+++ b/src/main/java/com/alibaba/druid/util/ServletPathMatcher.java
@@ -17,45 +17,56 @@ package com.alibaba.druid.util;
public class ServletPathMatcher implements PatternMatcher {
private final static ServletPathMatcher instance = new ServletPathMatcher();
-
+
public static ServletPathMatcher getInstance() {
return instance;
}
- /**
- *
- * three type: endsWithMatch(eg. /xxx*=/xxx/xyz), startsWithMatch(eg. *.xxx=abc.xxx), equals(eg. /xxx=/xxx).
- *
- * Notice: *xxx* will match *xxxyyyy. endsWithMatch first.
- */
- @Override
- public boolean matches(String pattern, String source) {
- if (pattern == null || source == null) {
- return false;
- }
- pattern = pattern.trim();
- source = source.trim();
- if (pattern.endsWith("*")) {
- // pattern: /druid* source:/druid/index.html
- int length = pattern.length() - 1;
- if (source.length() >= length) {
- if (pattern.substring(0, length).equals(source.substring(0, length))) {
- return true;
- }
- }
- } else if (pattern.startsWith("*")) {
- // pattern: *.html source:/xx/xx.html
- int length = pattern.length() - 1;
- if (source.length() >= length && source.endsWith(pattern.substring(1))) {
- return true;
- }
- } else {
- // pattern: /druid/index.html source:/druid/index.html
- if (pattern.equals(source)) {
- return true;
- }
- }
- return false;
- }
+ /**
+ *
+ * three type: endsWithMatch(eg. /xxx*=/xxx/xyz), startsWithMatch(eg.
+ * *.xxx=abc.xxx), equals(eg. /xxx=/xxx).
+ *
+ * Notice: *xxx* will match *xxxyyyy. endsWithMatch first.
+ */
+ @Override
+ public boolean matches(String pattern, String source) {
+ if (pattern == null || source == null) {
+ return false;
+ }
+ pattern = pattern.trim();
+ source = source.trim();
+ if (pattern.endsWith("*")) {
+ // pattern: /druid* source:/druid/index.html
+ int length = pattern.length() - 1;
+ if (source.length() >= length) {
+ if (pattern.substring(0, length).equals(
+ source.substring(0, length))) {
+ return true;
+ }
+ }
+ } else if (pattern.startsWith("*")) {
+ // pattern: *.html source:/xx/xx.html
+ int length = pattern.length() - 1;
+ if (source.length() >= length
+ && source.endsWith(pattern.substring(1))) {
+ return true;
+ }
+ } else if (pattern.contains("*")) {
+ // pattern: /druid/*/index.html source:/druid/admin/index.html
+ int start = pattern.indexOf("*");
+ int end = pattern.lastIndexOf("*");
+ if (source.startsWith(pattern.substring(0, start))
+ && source.endsWith(pattern.substring(end + 1))) {
+ return true;
+ }
+ } else {
+ // pattern: /druid/index.html source:/druid/index.html
+ if (pattern.equals(source)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/main/resources/META-INF/druid-driver.properties b/src/main/resources/META-INF/druid-driver.properties
index 95f94a1c44..9b1fcc926c 100644
--- a/src/main/resources/META-INF/druid-driver.properties
+++ b/src/main/resources/META-INF/druid-driver.properties
@@ -1,6 +1,7 @@
jdbc:derby:=org.apache.derby.jdbc.EmbeddedDriver
-jdbc:mysql:=com.mysql.jdbc.Driver
-jdbc:oracle:=oracle.jdbc.driver.OracleDriver
+jdbc:mysql:=com.mysql.jdbc.Driver
+jdbc:log4jdbc:=net.sf.log4jdbc.DriverSpy
+jdbc:oracle:=oracle.jdbc.driver.OracleDriver
jdbc:microsoft:=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:jtds:=net.sourceforge.jtds.jdbc.Driver
jdbc:postgresql:=org.postgresql.Driver