diff --git a/pom.xml b/pom.xml
index a161b60179..f7fb32ded1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -400,7 +400,7 @@
org.mybatis
mybatis
- 3.1.1
+ 3.3.0
provided
true
@@ -415,7 +415,7 @@
log4j
log4j
- 1.2.16
+ 1.2.17
provided
@@ -430,6 +430,18 @@
1.6.1
provided
+
+ org.apache.logging.log4j
+ log4j-api
+ 2.3
+ provided
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.3
+ provided
+
mysql
diff --git a/src/main/java/com/alibaba/druid/support/logging/Log4j2Impl.java b/src/main/java/com/alibaba/druid/support/logging/Log4j2Impl.java
new file mode 100644
index 0000000000..935733b0d5
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/logging/Log4j2Impl.java
@@ -0,0 +1,106 @@
+package com.alibaba.druid.support.logging;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class Log4j2Impl implements Log {
+
+ private Logger log;
+
+ private int errorCount;
+ private int warnCount;
+ private int infoCount;
+ private int debugCount;
+
+ /**
+ * @since 0.2.21
+ * @param log
+ */
+ public Log4j2Impl(Logger log){
+ this.log = log;
+ }
+
+ public Log4j2Impl(String loggerName){
+ log = LogManager.getLogger(loggerName);
+ }
+
+ public Logger getLog() {
+ return log;
+ }
+
+ public boolean isDebugEnabled() {
+ return log.isDebugEnabled();
+ }
+
+ public void error(String s, Throwable e) {
+ errorCount++;
+ log.error(s, e);
+ }
+
+ public void error(String s) {
+ errorCount++;
+ log.error(s);
+ }
+
+ public void debug(String s) {
+ debugCount++;
+ log.debug(s);
+ }
+
+ public void debug(String s, Throwable e) {
+ debugCount++;
+ log.debug(s, e);
+ }
+
+ public void warn(String s) {
+ log.warn(s);
+ warnCount++;
+ }
+
+ public void warn(String s, Throwable e) {
+ log.warn(s, e);
+ warnCount++;
+ }
+
+ public int getWarnCount() {
+ return warnCount;
+ }
+
+ public int getErrorCount() {
+ return errorCount;
+ }
+
+ public void resetStat() {
+ errorCount = 0;
+ warnCount = 0;
+ infoCount = 0;
+ debugCount = 0;
+ }
+
+ public int getDebugCount() {
+ return debugCount;
+ }
+
+ public boolean isInfoEnabled() {
+ return log.isInfoEnabled();
+ }
+
+ public void info(String msg) {
+ infoCount++;
+ log.info(msg);
+ }
+
+ public boolean isWarnEnabled() {
+ return log.isEnabled(Level.WARN);
+ }
+
+ public int getInfoCount() {
+ return infoCount;
+ }
+
+ public String toString() {
+ return log.toString();
+ }
+
+}
diff --git a/src/main/java/com/alibaba/druid/support/logging/LogFactory.java b/src/main/java/com/alibaba/druid/support/logging/LogFactory.java
index 81f6c2e98c..2a1114a8f3 100644
--- a/src/main/java/com/alibaba/druid/support/logging/LogFactory.java
+++ b/src/main/java/com/alibaba/druid/support/logging/LogFactory.java
@@ -27,6 +27,7 @@ public class LogFactory {
// 优先选择log4j,而非Apache Common Logging. 因为后者无法设置真实Log调用者的信息
tryImplementation("org.apache.log4j.Logger", "com.alibaba.druid.support.logging.Log4jImpl");
+ tryImplementation("org.apache.logging.log4j.Logger", "com.alibaba.druid.support.logging.Log4j2Impl");
tryImplementation("org.slf4j.Logger", "com.alibaba.druid.support.logging.SLF4JImpl");
tryImplementation("org.apache.commons.logging.LogFactory",
"com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl");