This is an automated email from the ASF dual-hosted git repository.
huxing pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 342f37a Enhancement/logger factory (#3389)
342f37a is described below
commit 342f37a38481ac32925a3d1de5c70b2578ddfd74
Author: kezhenxu94 <[email protected]>
AuthorDate: Thu Jan 31 11:01:06 2019 +0800
Enhancement/logger factory (#3389)
* polishing LoggerFactory
* polishing code using map.computeIfAbsent
* fix ci failure
* remove unnecessary break in switch
* call overloaded method
* update as requested
* add unit test
---
.../apache/dubbo/common/logger/LoggerFactory.java | 73 ++++++++++------------
.../dubbo/common/logger/LoggerFactoryTest.java | 10 ++-
2 files changed, 43 insertions(+), 40 deletions(-)
diff --git
a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
index ec98755..41d1632 100644
---
a/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
+++
b/dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java
@@ -25,6 +25,8 @@ import
org.apache.dubbo.common.logger.slf4j.Slf4jLoggerAdapter;
import org.apache.dubbo.common.logger.support.FailsafeLogger;
import java.io.File;
+import java.util.Arrays;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -34,40 +36,43 @@ import java.util.concurrent.ConcurrentMap;
*/
public class LoggerFactory {
- private static final ConcurrentMap<String, FailsafeLogger> LOGGERS = new
ConcurrentHashMap<String, FailsafeLogger>();
+ private static final ConcurrentMap<String, FailsafeLogger> LOGGERS = new
ConcurrentHashMap<>();
private static volatile LoggerAdapter LOGGER_ADAPTER;
// search common-used logging frameworks
static {
- String logger = System.getProperty("dubbo.application.logger");
- if ("slf4j".equals(logger)) {
- setLoggerAdapter(new Slf4jLoggerAdapter());
- } else if ("jcl".equals(logger)) {
- setLoggerAdapter(new JclLoggerAdapter());
- } else if ("log4j".equals(logger)) {
- setLoggerAdapter(new Log4jLoggerAdapter());
- } else if ("jdk".equals(logger)) {
- setLoggerAdapter(new JdkLoggerAdapter());
- } else if ("log4j2".equals(logger)) {
- setLoggerAdapter(new Log4j2LoggerAdapter());
- } else {
- try {
+ String logger = System.getProperty("dubbo.application.logger", "");
+ switch (logger) {
+ case "slf4j":
+ setLoggerAdapter(new Slf4jLoggerAdapter());
+ break;
+ case "jcl":
+ setLoggerAdapter(new JclLoggerAdapter());
+ break;
+ case "log4j":
setLoggerAdapter(new Log4jLoggerAdapter());
- } catch (Throwable e1) {
- try {
- setLoggerAdapter(new Slf4jLoggerAdapter());
- } catch (Throwable e2) {
+ break;
+ case "jdk":
+ setLoggerAdapter(new JdkLoggerAdapter());
+ break;
+ case "log4j2":
+ setLoggerAdapter(new Log4j2LoggerAdapter());
+ break;
+ default:
+ List<Class<? extends LoggerAdapter>> candidates =
Arrays.asList(
+ Log4jLoggerAdapter.class,
+ Slf4jLoggerAdapter.class,
+ Log4j2LoggerAdapter.class,
+ JclLoggerAdapter.class,
+ JdkLoggerAdapter.class
+ );
+ for (Class<? extends LoggerAdapter> clazz : candidates) {
try {
- setLoggerAdapter(new Log4j2LoggerAdapter());
- } catch (Throwable e3) {
- try {
- setLoggerAdapter(new JclLoggerAdapter());
- } catch (Throwable e4) {
- setLoggerAdapter(new JdkLoggerAdapter());
- }
+ setLoggerAdapter(clazz.newInstance());
+ break;
+ } catch (Throwable ignored) {
}
}
- }
}
}
@@ -103,12 +108,7 @@ public class LoggerFactory {
* @return logger
*/
public static Logger getLogger(Class<?> key) {
- FailsafeLogger logger = LOGGERS.get(key.getName());
- if (logger == null) {
- LOGGERS.putIfAbsent(key.getName(), new
FailsafeLogger(LOGGER_ADAPTER.getLogger(key)));
- logger = LOGGERS.get(key.getName());
- }
- return logger;
+ return LOGGERS.computeIfAbsent(key.getName(), name -> new
FailsafeLogger(LOGGER_ADAPTER.getLogger(name)));
}
/**
@@ -118,12 +118,7 @@ public class LoggerFactory {
* @return logger provider
*/
public static Logger getLogger(String key) {
- FailsafeLogger logger = LOGGERS.get(key);
- if (logger == null) {
- LOGGERS.putIfAbsent(key, new
FailsafeLogger(LOGGER_ADAPTER.getLogger(key)));
- logger = LOGGERS.get(key);
- }
- return logger;
+ return LOGGERS.computeIfAbsent(key, k -> new
FailsafeLogger(LOGGER_ADAPTER.getLogger(k)));
}
/**
@@ -153,4 +148,4 @@ public class LoggerFactory {
return LOGGER_ADAPTER.getFile();
}
-}
\ No newline at end of file
+}
diff --git
a/dubbo-common/src/test/java/org/apache/dubbo/common/logger/LoggerFactoryTest.java
b/dubbo-common/src/test/java/org/apache/dubbo/common/logger/LoggerFactoryTest.java
index b331f76..25fce0e 100644
---
a/dubbo-common/src/test/java/org/apache/dubbo/common/logger/LoggerFactoryTest.java
+++
b/dubbo-common/src/test/java/org/apache/dubbo/common/logger/LoggerFactoryTest.java
@@ -58,4 +58,12 @@ public class LoggerFactoryTest {
assertThat(logger1, is(logger2));
}
-}
\ No newline at end of file
+
+ @Test
+ public void shouldReturnSameLogger() {
+ Logger logger1 = LoggerFactory.getLogger(this.getClass().getName());
+ Logger logger2 = LoggerFactory.getLogger(this.getClass().getName());
+
+ assertThat(logger1, is(logger2));
+ }
+}