log4j的初始化
log4j的初始化方式如下:
private static final Logger log = Logger.getLogger(Log4jTest.class);
该Logger类是继承自Category类,实现的是AppenderAttachable接口,如下:
而Category类又继承自java.lang.Object
,如下就是官方文档中的介绍:
java.lang.Object
-- extended by org.apache.log4j.Category
-- extended by org.apache.log4j.Logger
而在Log4j初始化时,是在Logger类中完成对log4j的获取,如下:
public static Logger getLogger(Class clazz) {
return LogManager.getLogger(clazz.getName());
}
在LogManager中完成对log4j静态配置资源的加载,该加载方式是通过静态代码块来实现的,如下:
static {
Hierarchy h = new Hierarchy(new RootLogger(Level.DEBUG));
repositorySelector = new DefaultRepositorySelector(h);
String override = OptionConverter.getSystemProperty("log4j.defaultInitOverride", (String)null);
if (override != null && !"false".equalsIgnoreCase(override)) {
LogLog.debug("Default initialization of overridden by log4j.defaultInitOverrideproperty.");
} else {
String configurationOptionStr = OptionConverter.getSystemProperty("log4j.configuration", (String)null);
String configuratorClassName = OptionConverter.getSystemProperty("log4j.configuratorClass", (String)null);
URL url = null;
if (configurationOptionStr == null) {
url = Loader.getResource("log4j.xml");
if (url == null) {
url = Loader.getResource("log4j.properties");
}
} else {
try {
url = new URL(configurationOptionStr);
} catch (MalformedURLException var7) {
url = Loader.getResource(configurationOptionStr);
}
}
if (url != null) {