2014-02-19 20 views
35

Я знаю, что могу установить путь logback.xml так:Установка logback.xml путь программно

Указание расположения файла конфигурации по умолчанию как свойство системы

Вы можете указать местоположение файл конфигурации по умолчанию с системным свойством с именем «logback.configurationFile». Значением этого свойства может быть URL-адрес, ресурс в пути к классу или путь к файлу, внешнему по отношению к приложению.

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

но как я могу это сделать в коде?

ответ

39

Вы могли бы использовать:

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

Примечание: Я не проверял, но он должен работать.

+8

Я тестировал его, и он действительно работает. – approxiblue

+2

Если вы хотите переопределить любую конфигурацию по умолчанию, этот метод не работает. Вам нужно сбросить конфигурацию с помощью JoranConfiguration – isian8814

39
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(); 
+0

Я бы поставил это в качестве лучшего ответа, если бы вы добавили вызов reset(). – JimN

+0

Это единственный способ передать конфигурацию файла настроек журнала? Я также обнаружил, что базовыйконфигуратор _ye olde_ log4j имеет базовую конфигурацию относительно интуитивно. Передайте имя файла и пусть это произойдет. – will

+0

JoranConfigurator наследует от http://logback.qos.ch/apidocs/ch/qos/logback/core/joran/GenericConfigurator.html и есть 5 переопределений для 'doConfigure()' –

0

Я просто хочу поделиться тем, что я сделал в конце концов с Джерси-Спринг приложение:

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> 

из среды исполнения (исходный проект в моем случае) для компиляции.

Смежные вопросы