以编程方式设置logback.xml路径

时间:2014-02-19 16:00:46

标签: java logback

我知道我可以像这样设置logback.xml路径:

将默认配置文件的位置指定为系统属性

您可以使用名为" logback.configurationFile"的系统属性指定默认配置文件的位置。此属性的值可以是URL,类路径上的资源或应用程序外部文件的路径。

java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1

但我怎么能在代码中做到这一点?

5 个答案:

答案 0 :(得分:49)

LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
loggerContext.reset();
JoranConfigurator configurator = new JoranConfigurator();
InputStream configStream = FileUtils.openInputStream(logbackPropertiesUserFile);
configurator.setContext(loggerContext);
configurator.doConfigure(configStream); // loads logback file
configStream.close();

答案 1 :(得分:47)

您可以使用:

System.setProperty("logback.configurationFile", "/path/to/config.xml");

但它必须在加载logback之前发生,例如:

class Main {
  static { System.setProperty("logback.configurationFile", "/path/to/config.xml");}
  private final Logger LOG = LoggerFactory.getLogger(Main.class);

  public void main (String[] args) { ... }
}

注意:我没有测试过,但应该可以使用。

答案 2 :(得分:11)

修改环境变量可能并不总是可行的。 要正确地看到回滚手册:

http://logback.qos.ch/manual/configuration.html#joranDirectly

答案 3 :(得分:3)

我只想分享我最终使用Jersey-Spring应用程序所做的事情:

MyWebApplicationInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(final ServletContext servletContext) throws ServletException {
        servletContext.addListener(new LogbackConfigListener());
        try { LogbackConfigurer.initLogging(servletContext.getRealPath("/WEB-INF/logback.xml")); }
        catch (FileNotFoundException | JoranException e) { e.printStackTrace(); }
    }
}

我还必须补充一点,我必须移动

<dependency>
    <groupId>org.logback-extensions</groupId>
    <artifactId>logback-ext-spring</artifactId>
    <version>0.1.4</version>
    <scope>compile</scope></dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
    <scope>compile</scope></dependency>

从运行时(在我的情况下为父项目)进行编译。

答案 4 :(得分:0)

logback-spring.xml 中包含另一个logback xml来更改路径

include resource =&#34; /path/to/logback.xml"

logback.xml

包含标记内添加数据