slf4j + Logback算是现在使用最广的日志记录方式,logback作为log4j的加强版,也是有很多新特性。logback默认读取配置文件为/src/resource/logback.xml,一般来说这样是没有问题的,但是,当需要需改配置的时候,就会比较麻烦,所以我们一般都会把配置文件放到一个固定的地方,这样每次需要改变配置的时候,直接改就可以了。
每个项目可能会有多个module,每个module有自己的配置文件,配置文件命名规则建议为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);
}
}
}
好了,代码清楚了,那么,该在哪里调用呢?可以在应用加载配置文件之前,比如WebAppInitializer中。