2525import org .apache .dubbo .common .logger .support .FailsafeLogger ;
2626
2727import java .io .File ;
28+ import java .util .Arrays ;
29+ import java .util .List ;
2830import java .util .Map ;
2931import java .util .concurrent .ConcurrentHashMap ;
3032import java .util .concurrent .ConcurrentMap ;
3436 */
3537public 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+ }
0 commit comments