Skip to content

Commit 342f37a

Browse files
kezhenxu94ralf0131
authored andcommitted
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
1 parent 35f1914 commit 342f37a

File tree

2 files changed

+43
-40
lines changed

2 files changed

+43
-40
lines changed

dubbo-common/src/main/java/org/apache/dubbo/common/logger/LoggerFactory.java

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.apache.dubbo.common.logger.support.FailsafeLogger;
2626

2727
import java.io.File;
28+
import java.util.Arrays;
29+
import java.util.List;
2830
import java.util.Map;
2931
import java.util.concurrent.ConcurrentHashMap;
3032
import java.util.concurrent.ConcurrentMap;
@@ -34,40 +36,43 @@
3436
*/
3537
public class LoggerFactory {
3638

37-
private static final ConcurrentMap<String, FailsafeLogger> LOGGERS = new ConcurrentHashMap<String, FailsafeLogger>();
39+
private static final ConcurrentMap<String, FailsafeLogger> LOGGERS = new ConcurrentHashMap<>();
3840
private static volatile LoggerAdapter LOGGER_ADAPTER;
3941

4042
// search common-used logging frameworks
4143
static {
42-
String logger = System.getProperty("dubbo.application.logger");
43-
if ("slf4j".equals(logger)) {
44-
setLoggerAdapter(new Slf4jLoggerAdapter());
45-
} else if ("jcl".equals(logger)) {
46-
setLoggerAdapter(new JclLoggerAdapter());
47-
} else if ("log4j".equals(logger)) {
48-
setLoggerAdapter(new Log4jLoggerAdapter());
49-
} else if ("jdk".equals(logger)) {
50-
setLoggerAdapter(new JdkLoggerAdapter());
51-
} else if ("log4j2".equals(logger)) {
52-
setLoggerAdapter(new Log4j2LoggerAdapter());
53-
} else {
54-
try {
44+
String logger = System.getProperty("dubbo.application.logger", "");
45+
switch (logger) {
46+
case "slf4j":
47+
setLoggerAdapter(new Slf4jLoggerAdapter());
48+
break;
49+
case "jcl":
50+
setLoggerAdapter(new JclLoggerAdapter());
51+
break;
52+
case "log4j":
5553
setLoggerAdapter(new Log4jLoggerAdapter());
56-
} catch (Throwable e1) {
57-
try {
58-
setLoggerAdapter(new Slf4jLoggerAdapter());
59-
} catch (Throwable e2) {
54+
break;
55+
case "jdk":
56+
setLoggerAdapter(new JdkLoggerAdapter());
57+
break;
58+
case "log4j2":
59+
setLoggerAdapter(new Log4j2LoggerAdapter());
60+
break;
61+
default:
62+
List<Class<? extends LoggerAdapter>> candidates = Arrays.asList(
63+
Log4jLoggerAdapter.class,
64+
Slf4jLoggerAdapter.class,
65+
Log4j2LoggerAdapter.class,
66+
JclLoggerAdapter.class,
67+
JdkLoggerAdapter.class
68+
);
69+
for (Class<? extends LoggerAdapter> clazz : candidates) {
6070
try {
61-
setLoggerAdapter(new Log4j2LoggerAdapter());
62-
} catch (Throwable e3) {
63-
try {
64-
setLoggerAdapter(new JclLoggerAdapter());
65-
} catch (Throwable e4) {
66-
setLoggerAdapter(new JdkLoggerAdapter());
67-
}
71+
setLoggerAdapter(clazz.newInstance());
72+
break;
73+
} catch (Throwable ignored) {
6874
}
6975
}
70-
}
7176
}
7277
}
7378

@@ -103,12 +108,7 @@ public static void setLoggerAdapter(LoggerAdapter loggerAdapter) {
103108
* @return logger
104109
*/
105110
public static Logger getLogger(Class<?> key) {
106-
FailsafeLogger logger = LOGGERS.get(key.getName());
107-
if (logger == null) {
108-
LOGGERS.putIfAbsent(key.getName(), new FailsafeLogger(LOGGER_ADAPTER.getLogger(key)));
109-
logger = LOGGERS.get(key.getName());
110-
}
111-
return logger;
111+
return LOGGERS.computeIfAbsent(key.getName(), name -> new FailsafeLogger(LOGGER_ADAPTER.getLogger(name)));
112112
}
113113

114114
/**
@@ -118,12 +118,7 @@ public static Logger getLogger(Class<?> key) {
118118
* @return logger provider
119119
*/
120120
public static Logger getLogger(String key) {
121-
FailsafeLogger logger = LOGGERS.get(key);
122-
if (logger == null) {
123-
LOGGERS.putIfAbsent(key, new FailsafeLogger(LOGGER_ADAPTER.getLogger(key)));
124-
logger = LOGGERS.get(key);
125-
}
126-
return logger;
121+
return LOGGERS.computeIfAbsent(key, k -> new FailsafeLogger(LOGGER_ADAPTER.getLogger(k)));
127122
}
128123

129124
/**
@@ -153,4 +148,4 @@ public static File getFile() {
153148
return LOGGER_ADAPTER.getFile();
154149
}
155150

156-
}
151+
}

dubbo-common/src/test/java/org/apache/dubbo/common/logger/LoggerFactoryTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,12 @@ public void testGetLogger() {
5858

5959
assertThat(logger1, is(logger2));
6060
}
61-
}
61+
62+
@Test
63+
public void shouldReturnSameLogger() {
64+
Logger logger1 = LoggerFactory.getLogger(this.getClass().getName());
65+
Logger logger2 = LoggerFactory.getLogger(this.getClass().getName());
66+
67+
assertThat(logger1, is(logger2));
68+
}
69+
}

0 commit comments

Comments
 (0)