log4j默认加载的配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j默认加载的配置文件相关的知识,希望对你有一定的参考价值。

通过查看log4j源码,版本1.2.16,log4j包 去默认的位置加载 配置文件;

文件名如下:

static public final String DEFAULT_CONFIGURATION_FILE = "log4j.properties";
  
  static final String DEFAULT_XML_CONFIGURATION_FILE = "log4j.xml";  

加载配置的过程:

LogManager 的 static 代码段:

if(configurationOptionStr == null) {    
    url = Loader.getResource(DEFAULT_XML_CONFIGURATION_FILE);
    if(url == null) {
      url = Loader.getResource(DEFAULT_CONFIGURATION_FILE);
    }
      } else {
    try {
      url = new URL(configurationOptionStr);
    } catch (MalformedURLException ex) {
      // so, resource is not a URL:
      // attempt to get the resource from the class path
      url = Loader.getResource(configurationOptionStr); 
    }    
      }
      
      // If we have a non-null url, then delegate the rest of the
      // configuration to the OptionConverter.selectAndConfigure
      // method.
      if(url != null) {
        LogLog.debug("Using URL ["+url+"] for automatic log4j configuration.");
        try {
            OptionConverter.selectAndConfigure(url, configuratorClassName,
                       LogManager.getLoggerRepository());
        } catch (NoClassDefFoundError e) {
            LogLog.warn("Error during default initialization", e);
        }
      } else {
        LogLog.debug("Could not find resource: ["+configurationOptionStr+"].");
      }
    } else {
        LogLog.debug("Default initialization of overridden by " + 
            DEFAULT_INIT_OVERRIDE_KEY + "property."); 
    }  

Loader.getResource()代码如下,其中getTCL(),获取的是线程上下文类加载器,即{Thread.currentThread().getContextClassLoader()},该类加载器是可设置的,默认为系统类加载器;

 static public URL getResource(String resource) {
    ClassLoader classLoader = null;
    URL url = null;
    
    try {
      if(!java1 && !ignoreTCL) {
        classLoader = getTCL();
        if(classLoader != null) {
          LogLog.debug("Trying to find ["+resource+"] using context classloader "
               +classLoader+".");
          url = classLoader.getResource(resource);      
          if(url != null) {
            return url;
          }
        }
      }

 

以上是关于log4j默认加载的配置文件的主要内容,如果未能解决你的问题,请参考以下文章

log4j配置文件加载

springboot 关于log4j日志配置

Log4j 2 配置文件

log4j配置文件加载逻辑调试方法

log4j介绍

Flume-ng禁用自动加载配置文件功能