java代码修改xml文件路径,如何修改logback.xml配置文件在resource以外的位置

因为spring搭建的web项目打包时默认将resource文件夹下的文件一起打包,但是我们又想在打包后修改某些配置

这里以我遇到的logback.xml配置更改默认路径来看

根据LoggerFactory.getLogger的方法找到加载文件的位置,如下

public URL findURLOfDefaultConfigurationFile(boolean updateStatus) {

ClassLoader myClassLoader = Loader.getClassLoaderOfObject(this);

URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);

if (url != null) {

return url;

}

url = getResource(TEST_AUTOCONFIG_FILE, myClassLoader, updateStatus);

if (url != null) {

return url;

}

url = getResource(GROOVY_AUTOCONFIG_FILE, myClassLoader, updateStatus);

if (url != null) {

return url;

}

return getResource(AUTOCONFIG_FILE, myClassLoader, updateStatus);

}

可以看出是根据顺序依次往下寻找配置文件位置,在该类的属性中定义了对应的变量值如下

public class ContextInitializer {

final public static String GROOVY_AUTOCONFIG_FILE = "logback.groovy";

final public static String AUTOCONFIG_FILE = "logback.xml";

final public static String TEST_AUTOCONFIG_FILE = "logback-test.xml";

final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";

具体加载顺序参照静态变量上面代码块的查找顺序

那么我们想修改配置文件位置,只需找到第一个加载的方法中是如何加载的,因为后面加载文件的位置都是代码默认写死了的

可以看到上面代码块中,最先加载的代码块是

URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus);

if (url != null) {

return url;

}

点进去之后可以看到

private URL findConfigFileURLFromSystemProperties(ClassLoader classLoader, boolean updateStatus) {

String logbackConfigFile = OptionHelper.getSystemProperty(CONFIG_FILE_PROPERTY);

这里可以看到OptionHelper.getSystemProperty(CONFIG_FILE_PROPERTY)传入的是静态变量中的

final public static String CONFIG_FILE_PROPERTY = "logback.configurationFile";

你可能感兴趣的:(java代码修改xml文件路径)