Logback指定自定义配置文件

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中。

你可能感兴趣的:(Logback指定自定义配置文件)