From d6f8fb00771bfa5c4c166bd763d115f2ea3084de Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 2 Mar 2020 16:56:41 +0800 Subject: [PATCH] support spi --- .../main/java/cn/hutool/log/LogFactory.java | 40 +++++-------------- .../log/dialect/slf4j/Slf4jLogFactory.java | 2 +- .../services/cn.hutool.log.LogFactory | 6 +++ .../cn/hutool/log/test/CustomLogTest.java | 2 +- 4 files changed, 19 insertions(+), 31 deletions(-) create mode 100644 hutool-log/src/main/resources/META-INF/services/cn.hutool.log.LogFactory diff --git a/hutool-log/src/main/java/cn/hutool/log/LogFactory.java b/hutool-log/src/main/java/cn/hutool/log/LogFactory.java index fa00087a4..3a7301e0b 100644 --- a/hutool-log/src/main/java/cn/hutool/log/LogFactory.java +++ b/hutool-log/src/main/java/cn/hutool/log/LogFactory.java @@ -1,11 +1,14 @@ package cn.hutool.log; import java.net.URL; +import java.util.Iterator; import java.util.Map; +import java.util.ServiceLoader; import java.util.concurrent.ConcurrentHashMap; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.lang.caller.CallerUtil; +import cn.hutool.core.util.ServiceLoaderUtil; import cn.hutool.log.dialect.commons.ApacheCommonsLogFactory; import cn.hutool.log.dialect.console.ConsoleLogFactory; import cn.hutool.log.dialect.jboss.JbossLogFactory; @@ -224,35 +227,14 @@ public abstract class LogFactory { * @return 日志实现类 */ private static LogFactory doCreate() { - try { - return new Slf4jLogFactory(true); - } catch (NoClassDefFoundError e) { - // ignore - } - try { - return new Log4j2LogFactory(); - } catch (NoClassDefFoundError e) { - // ignore - } - try { - return new Log4jLogFactory(); - } catch (NoClassDefFoundError e) { - // ignore - } - try { - return new ApacheCommonsLogFactory(); - } catch (NoClassDefFoundError e) { - // ignore - } - try { - return new TinyLogFactory(); - } catch (NoClassDefFoundError e) { - // ignore - } - try { - return new JbossLogFactory(); - } catch (NoClassDefFoundError e) { - // ignore + final ServiceLoader factories = ServiceLoaderUtil.load(LogFactory.class); + final Iterator factoryIterator = factories.iterator(); + while(factoryIterator.hasNext()){ + try{ + return factoryIterator.next(); + } catch (NoClassDefFoundError e){ + // ignore + } } // 未找到任何可支持的日志库时判断依据:当JDK Logging的配置文件位于classpath中,使用JDK Logging,否则使用Console diff --git a/hutool-log/src/main/java/cn/hutool/log/dialect/slf4j/Slf4jLogFactory.java b/hutool-log/src/main/java/cn/hutool/log/dialect/slf4j/Slf4jLogFactory.java index 11969f556..8e1430b09 100644 --- a/hutool-log/src/main/java/cn/hutool/log/dialect/slf4j/Slf4jLogFactory.java +++ b/hutool-log/src/main/java/cn/hutool/log/dialect/slf4j/Slf4jLogFactory.java @@ -20,7 +20,7 @@ import cn.hutool.log.LogFactory; public class Slf4jLogFactory extends LogFactory { public Slf4jLogFactory() { - this(false); + this(true); } /** diff --git a/hutool-log/src/main/resources/META-INF/services/cn.hutool.log.LogFactory b/hutool-log/src/main/resources/META-INF/services/cn.hutool.log.LogFactory new file mode 100644 index 000000000..e2d708ccf --- /dev/null +++ b/hutool-log/src/main/resources/META-INF/services/cn.hutool.log.LogFactory @@ -0,0 +1,6 @@ +cn.hutool.log.dialect.slf4j.Slf4jLogFactory +cn.hutool.log.dialect.log4j2.Log4j2LogFactory +cn.hutool.log.dialect.log4j.Log4jLogFactory +cn.hutool.log.dialect.commons.ApacheCommonsLogFactory +cn.hutool.log.dialect.tinylog.TinyLogFactory +cn.hutool.log.dialect.jboss.JbossLogFactory \ No newline at end of file diff --git a/hutool-log/src/test/java/cn/hutool/log/test/CustomLogTest.java b/hutool-log/src/test/java/cn/hutool/log/test/CustomLogTest.java index e08ff6e45..b455419e6 100644 --- a/hutool-log/src/test/java/cn/hutool/log/test/CustomLogTest.java +++ b/hutool-log/src/test/java/cn/hutool/log/test/CustomLogTest.java @@ -97,7 +97,7 @@ public class CustomLogTest { @Test public void slf4jTest(){ - LogFactory factory = new Slf4jLogFactory(); + LogFactory factory = new Slf4jLogFactory(false); LogFactory.setCurrentLogFactory(factory); Log log = LogFactory.get();