|
|
@@ -14,13 +14,12 @@ import cn.hutool.log.dialect.tinylog.TinyLogFactory;
|
|
|
|
|
|
import java.net.URL;
|
|
|
import java.util.Map;
|
|
|
-import java.util.ServiceConfigurationError;
|
|
|
-import java.util.ServiceLoader;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
/**
|
|
|
* 日志工厂类
|
|
|
- *
|
|
|
+ *
|
|
|
+ * @author Looly
|
|
|
* @see Slf4jLogFactory
|
|
|
* @see Log4j2LogFactory
|
|
|
* @see Log4jLogFactory
|
|
|
@@ -29,20 +28,21 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
|
* @see JbossLogFactory
|
|
|
* @see ConsoleLogFactory
|
|
|
* @see JdkLogFactory
|
|
|
- *
|
|
|
- * @author Looly
|
|
|
- *
|
|
|
*/
|
|
|
public abstract class LogFactory {
|
|
|
|
|
|
- /** 日志框架名,用于打印当前所用日志框架 */
|
|
|
+ /**
|
|
|
+ * 日志框架名,用于打印当前所用日志框架
|
|
|
+ */
|
|
|
protected String name;
|
|
|
- /** 日志对象缓存 */
|
|
|
+ /**
|
|
|
+ * 日志对象缓存
|
|
|
+ */
|
|
|
private Map<Object, Log> logCache;
|
|
|
|
|
|
/**
|
|
|
* 构造
|
|
|
- *
|
|
|
+ *
|
|
|
* @param name 日志框架名
|
|
|
*/
|
|
|
public LogFactory(String name) {
|
|
|
@@ -52,7 +52,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 获取日志框架名,用于打印当前所用日志框架
|
|
|
- *
|
|
|
+ *
|
|
|
* @return 日志框架名
|
|
|
* @since 4.1.21
|
|
|
*/
|
|
|
@@ -62,7 +62,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 获得日志对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param name 日志对象名
|
|
|
* @return 日志对象
|
|
|
*/
|
|
|
@@ -77,7 +77,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 获得日志对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clazz 日志对应类
|
|
|
* @return 日志对象
|
|
|
*/
|
|
|
@@ -92,7 +92,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 创建日志对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param name 日志对象名
|
|
|
* @return 日志对象
|
|
|
*/
|
|
|
@@ -100,7 +100,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 创建日志对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clazz 日志对应类
|
|
|
* @return 日志对象
|
|
|
*/
|
|
|
@@ -110,7 +110,7 @@ public abstract class LogFactory {
|
|
|
* 检查日志实现是否存在<br>
|
|
|
* 此方法仅用于检查所提供的日志相关类是否存在,当传入的日志类类不存在时抛出ClassNotFoundException<br>
|
|
|
* 此方法的作用是在detectLogFactory方法自动检测所用日志时,如果实现类不存在,调用此方法会自动抛出异常,从而切换到下一种日志的检测。
|
|
|
- *
|
|
|
+ *
|
|
|
* @param logClassName 日志实现相关类
|
|
|
*/
|
|
|
protected void checkLogExist(Class<?> logClassName) {
|
|
|
@@ -118,6 +118,7 @@ public abstract class LogFactory {
|
|
|
}
|
|
|
|
|
|
// ------------------------------------------------------------------------- Static start
|
|
|
+
|
|
|
/**
|
|
|
* @return 当前使用的日志工厂
|
|
|
*/
|
|
|
@@ -127,7 +128,9 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 自定义日志实现
|
|
|
- *
|
|
|
+ *
|
|
|
+ * @param logFactoryClass 日志工厂类
|
|
|
+ * @return 自定义的日志工厂类
|
|
|
* @see Slf4jLogFactory
|
|
|
* @see Log4j2LogFactory
|
|
|
* @see Log4jLogFactory
|
|
|
@@ -136,9 +139,6 @@ public abstract class LogFactory {
|
|
|
* @see JbossLogFactory
|
|
|
* @see ConsoleLogFactory
|
|
|
* @see JdkLogFactory
|
|
|
- *
|
|
|
- * @param logFactoryClass 日志工厂类
|
|
|
- * @return 自定义的日志工厂类
|
|
|
*/
|
|
|
public static LogFactory setCurrentLogFactory(Class<? extends LogFactory> logFactoryClass) {
|
|
|
return GlobalLogFactory.set(logFactoryClass);
|
|
|
@@ -146,7 +146,9 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 自定义日志实现
|
|
|
- *
|
|
|
+ *
|
|
|
+ * @param logFactory 日志工厂类对象
|
|
|
+ * @return 自定义的日志工厂类
|
|
|
* @see Slf4jLogFactory
|
|
|
* @see Log4j2LogFactory
|
|
|
* @see Log4jLogFactory
|
|
|
@@ -155,9 +157,6 @@ public abstract class LogFactory {
|
|
|
* @see JbossLogFactory
|
|
|
* @see ConsoleLogFactory
|
|
|
* @see JdkLogFactory
|
|
|
- *
|
|
|
- * @param logFactory 日志工厂类对象
|
|
|
- * @return 自定义的日志工厂类
|
|
|
*/
|
|
|
public static LogFactory setCurrentLogFactory(LogFactory logFactory) {
|
|
|
return GlobalLogFactory.set(logFactory);
|
|
|
@@ -165,7 +164,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 获得日志对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param name 日志对象名
|
|
|
* @return 日志对象
|
|
|
*/
|
|
|
@@ -175,7 +174,7 @@ public abstract class LogFactory {
|
|
|
|
|
|
/**
|
|
|
* 获得日志对象
|
|
|
- *
|
|
|
+ *
|
|
|
* @param clazz 日志对应类
|
|
|
* @return 日志对象
|
|
|
*/
|
|
|
@@ -194,7 +193,8 @@ public abstract class LogFactory {
|
|
|
* 决定日志实现
|
|
|
* <p>
|
|
|
* 依次按照顺序检查日志库的jar是否被引入,如果未引入任何日志库,则检查ClassPath下的logging.properties,存在则使用JdkLogFactory,否则使用ConsoleLogFactory
|
|
|
- *
|
|
|
+ *
|
|
|
+ * @return 日志实现类
|
|
|
* @see Slf4jLogFactory
|
|
|
* @see Log4j2LogFactory
|
|
|
* @see Log4jLogFactory
|
|
|
@@ -203,7 +203,6 @@ public abstract class LogFactory {
|
|
|
* @see JbossLogFactory
|
|
|
* @see ConsoleLogFactory
|
|
|
* @see JdkLogFactory
|
|
|
- * @return 日志实现类
|
|
|
*/
|
|
|
public static LogFactory create() {
|
|
|
final LogFactory factory = doCreate();
|
|
|
@@ -215,7 +214,8 @@ public abstract class LogFactory {
|
|
|
* 决定日志实现
|
|
|
* <p>
|
|
|
* 依次按照顺序检查日志库的jar是否被引入,如果未引入任何日志库,则检查ClassPath下的logging.properties,存在则使用JdkLogFactory,否则使用ConsoleLogFactory
|
|
|
- *
|
|
|
+ *
|
|
|
+ * @return 日志实现类
|
|
|
* @see Slf4jLogFactory
|
|
|
* @see Log4j2LogFactory
|
|
|
* @see Log4jLogFactory
|
|
|
@@ -224,16 +224,11 @@ public abstract class LogFactory {
|
|
|
* @see JbossLogFactory
|
|
|
* @see ConsoleLogFactory
|
|
|
* @see JdkLogFactory
|
|
|
- * @return 日志实现类
|
|
|
*/
|
|
|
private static LogFactory doCreate() {
|
|
|
- final ServiceLoader<LogFactory> factories = ServiceLoaderUtil.load(LogFactory.class);
|
|
|
- for (LogFactory factory : factories) {
|
|
|
- try {
|
|
|
- return factory;
|
|
|
- } catch (ServiceConfigurationError e) {
|
|
|
- // ignore
|
|
|
- }
|
|
|
+ final LogFactory factory = ServiceLoaderUtil.loadFirstAvailable(LogFactory.class);
|
|
|
+ if(null != factory){
|
|
|
+ return factory;
|
|
|
}
|
|
|
|
|
|
// 未找到任何可支持的日志库时判断依据:当JDK Logging的配置文件位于classpath中,使用JDK Logging,否则使用Console
|