以编程方式设置logback.xmlpath
我知道我可以像这样设置logback.xmlpath:
指定默认configuration文件的位置作为系统属性
您可以使用名为“logback.configurationFile”的系统属性指定默认configuration文件的位置。 此属性的值可以是URL,类path上的资源或应用程序外部文件的path。
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) { ... } }
注:我没有testing过,但它应该工作。
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();
修改环境variables可能并不总是可行的。 要正确地做到这一点,请参阅logback手册:
http://logback.qos.ch/manual/configuration.html#joranDirectly
我只想分享一下我在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>
从运行时(父项目在我的情况)来编译。