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

Java 以编程方式设置logback.xml路径,java,logback,Java,Logback,我知道我可以这样设置logback.xml路径: 将默认配置文件的位置指定为系统属性 您可以使用名为“logback.configurationFile”的系统属性指定默认配置文件的位置。此属性的值可以是URL、类路径上的资源或应用程序外部文件的路径 java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1 但是我如何在代码中实现它呢?您可以使用: System.setProperty(

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

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

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

java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1
但是我如何在代码中实现它呢?

您可以使用:

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) { ... }
}

注意:我没有测试过它,但它应该可以工作。

修改环境变量可能并不总是可行的。
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();
要正确执行此操作,请参阅logback手册:


我只想与大家分享我在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>

org.logback-extensions
后置弹簧
0.1.4
编译
回写
回溯堆芯
1.2.3
编译

从运行时(在我的例子中是父项目)到编译。

包括另一个logback xml以在logback spring.xml中更改路径

include resource=“/path/to/logback.xml”


logback.xml中的包含的标记中添加数据

如果添加reset()调用,我认为这是最好的答案。这是传递logback设置文件配置的唯一方法吗?我还发现ye olde log4j基本配置程序相对直观。传递一个文件名并让它发生。JoranConfigurator继承自并且有5个重写用于
doConfigure()
@michid您有更好的解决方案吗?如果您使用Spring Boot而不是
org.springframework.Boot.logging.logback。应该使用SpringBootJoranConfigurator
,它是
JoranConfigurator
的子类。此类添加了对Spring引导特定部分的支持,如
()。即使是这个示例也比BasicConfiguration更复杂。如果您想覆盖任何默认配置,此方法也不起作用。您需要使用JORANConfiguration重置配置它是像“application/test/conf/logback.xml”这样的相对路径还是完整路径“C:/application/test/conf/logback.xml”?取决于您的项目配置-但是如果您使用的是maven,jar中的相对路径应该可以工作。所以,如果你把它放在src/main/resources中,只需要文件名就行了restart@syd我不知道Tomcat,但一般来说,在应用服务器环境中,您应该依赖容器日志系统,而不是使用自己的日志系统。