slf4j + Logback算是現(xiàn)在使用最廣的日志記錄方式,logback作為log4j的加強(qiáng)版旱易,也是有很多新特性岖瑰。logback默認(rèn)讀取配置文件為/src/resource/logback.xml狮杨,一般來說這樣是沒有問題的,但是爽柒,當(dāng)需要需改配置的時(shí)候吴菠,就會比較麻煩,所以我們一般都會把配置文件放到一個(gè)固定的地方浩村,這樣每次需要改變配置的時(shí)候做葵,直接改就可以了。
每個(gè)項(xiàng)目可能會有多個(gè)module心墅,每個(gè)module有自己的配置文件酿矢,配置文件命名規(guī)則建議為logback-${module}.xml榨乎。下面的代碼展示了如何讀取PIF_CONF目錄下的配置文件,如果該文件不存在瘫筐,則使用resource目錄下的配置文件蜜暑,好了,來看代碼:
public static void loadLogbackConfig(String externalFileName) throws IOException, JoranException {
//use PIF_CONF configuration file
String dirPath = System.getenv("PIF_CONF");
dirPath = dirPath.endsWith("/") ? dirPath : dirPath + "/";
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
File externalConfigFile = new File(dirPath + externalFileName);
//use classpath configuration file
if (!externalConfigFile.exists()) {
logger.info("External config file not find. Use classpath config file.");
Resource resource = new ClassPathResource(externalFileName);
externalConfigFile = resource.getFile();
}
if (!externalConfigFile.exists()) {
throw new FileNotFoundException(externalConfigFile.getPath());
} else {
if (!externalConfigFile.canRead()) {
throw new IOException("Logback External Config File exists and is a file, but cannot be read.");
} else {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
lc.reset();
configurator.doConfigure(externalConfigFile.getPath());
StatusPrinter.printInCaseOfErrorsOrWarnings(lc);
}
}
}
好了策肝,代碼清楚了肛捍,那么,該在哪里調(diào)用呢之众?可以在應(yīng)用加載配置文件之前篇梭,比如WebAppInitializer中。