“JCL 原理”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的1个中间版本) | |||
第13行: | 第13行: | ||
|Log4JLogger | |Log4JLogger | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
+ | |||
=== 动态加载 Log 实现类的核心代码 === | === 动态加载 Log 实现类的核心代码 === | ||
第35行: | 第39行: | ||
<syntaxhighlight lang="java"> | <syntaxhighlight lang="java"> | ||
public class LogFactoryImpl extends LogFactory { | public class LogFactoryImpl extends LogFactory { | ||
− | …… | + | …… |
private static final String LOGGING_IMPL_LOG4J_LOGGER = "org.apache.commons.logging.impl.Log4JLogger"; | private static final String LOGGING_IMPL_LOG4J_LOGGER = "org.apache.commons.logging.impl.Log4JLogger"; | ||
− | …… | + | …… |
private static final String[] classesToDiscover = { | private static final String[] classesToDiscover = { | ||
LOGGING_IMPL_LOG4J_LOGGER, | LOGGING_IMPL_LOG4J_LOGGER, | ||
第44行: | 第48行: | ||
"org.apache.commons.logging.impl.SimpleLog" | "org.apache.commons.logging.impl.SimpleLog" | ||
}; | }; | ||
− | …… | + | …… |
public Log getInstance(Class clazz) throws LogConfigurationException { | public Log getInstance(Class clazz) throws LogConfigurationException { | ||
return getInstance(clazz.getName()); | return getInstance(clazz.getName()); |
2023年2月26日 (日) 04:42的最新版本
https://www.bilibili.com/video/BV1iJ411H74S?p=19
通过 LogFactory 动态加载 Log 实现类
interface Log | ||||||
---|---|---|---|---|---|---|
Jdk13LumberjackLogger | LogKitLogger | SimpleLog | NoOpLog | Jdk14Logger | AvalonLogger | Log4JLogger |
动态加载 Log 实现类的核心代码
JCLTest.java
Log log = LogFactory.getLog(JCLTest.class);
LogFactory.java
public abstract class LogFactory {
……
public static Log getLog(Class clazz) throws LogConfigurationException {
return getFactory().getInstance(clazz);
}
……
}
LogFactoryImpl 是抽象类 LogFactory 的唯一子类
public class LogFactoryImpl extends LogFactory {
……
private static final String LOGGING_IMPL_LOG4J_LOGGER = "org.apache.commons.logging.impl.Log4JLogger";
……
private static final String[] classesToDiscover = {
LOGGING_IMPL_LOG4J_LOGGER,
"org.apache.commons.logging.impl.Jdk14Logger",
"org.apache.commons.logging.impl.Jdk13LumberjackLogger",
"org.apache.commons.logging.impl.SimpleLog"
};
……
public Log getInstance(Class clazz) throws LogConfigurationException {
return getInstance(clazz.getName());
}
……
public Log getInstance(String name) throws LogConfigurationException {
Log instance = (Log) instances.get(name);
if (instance == null) {
instance = newInstance(name);
instances.put(name, instance);
}
return instance;
}
……
protected Log newInstance(String name) throws LogConfigurationException {
……
if (logConstructor == null) {
instance = discoverLogImplementation(name);
}
……
}
……
private Log discoverLogImplementation(String logCategory)
throws LogConfigurationException {
……
for(int i=0; i<classesToDiscover.length && result == null; ++i) {
result = createLogFromClass(classesToDiscover[i], logCategory, true);
}
……
}
……
}