2015-02-05 3 views
9

Log4j2 прекрасно работает с Spring Boot через конфигурационный файл log4j2.xml в корневом пути пути, точно так же, как указано в документации.Как я могу изменить местоположение log4j2.xml по умолчанию в Java Spring Boot?

При попытке переместить этот файл в другое место, однако, я не могу передать новое местоположение Spring при запуске. От the documentation:

Различные системы протоколирований могут быть активированы путем включения соответствующих библиотек на пути к классам, и в дальнейшей настроены обеспечивая соответствующий конфигурационный файл в корневом каталоге пути к классам, или в месте, указанном по свойствам Spring Environment logging.config.

Я попытался установить новое местоположение с системным свойством Java

java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar 

или с использованием внешнего application.properties, содержащим соответствующего свойство

logging.config=classpath:/config/log4j2.xml 

Но я регулярно встречен следующим сообщением об ошибке ,

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 
+0

Не могли бы вы подтвердить, что '/ config' находится в пути к классам?если вы используете проект на основе maven, поместите файл xml под 'src/main/resources' – Mithun

+0

Папка' config' (package) находится в пути к классам и уже содержит 'application.yml', который правильно подобран и успешно используется в приложении. – micpalmia

+0

Не могли бы вы поместить файл xml в 'src/main/resources' и попробовать, чтобы мы могли сузить проблему? – Mithun

ответ

14

Как указано в Spring reference documentation, то logging.config свойство не может быть установлено среди свойств приложения, так как они считываются после регистрации уже инициализирована.

Решение указать путь к внешней конфигурации лесозаготовительной таким образом:

java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar 
1

Ответ micpalmia является абсолютно правильным.

Мне нужно было установить конфигурацию вне класса пути, я не хотел передавать файл конфигурации в качестве параметра. Так что я поставил очень простую конфигурацию протоколирования в пути к классам ресурсов и имел переконфигурируйте весной загрузки приложения регистрации при запуске, например, так:

@SpringBootApplication 
public class Application implements CommandLineRunner { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class, args); 
    } 

    @Override 
    public void run(String... param) throws UnsupportedEncodingException { 
     Configurator.initialize(null, "config/log4j2.xml"); 
     // ... 
    } 
} 

Этот подход имеет существенный недостаток: Весь процесс загрузки приложения не будет регистрироваться в качестве с внешней конфигурацией. Но как только пользовательский код запускается, регистратор работает по назначению. Хотя вы не можете, я считаю, что это компромисс, с которым я могу жить.

1

У меня такая же проблема в моем проекте, кроме log4j2.xml Мне также нужны другие файлы конфигурации в пути к классу. Вот мои 2 решения, работает:

Soluation 1: Запустите приложение загрузки пружинный с org.springframework.boot.loader.JarLauncher

java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher 

Решение 2: Напишите '' ./Config запись пути класса в МАНИФЕСТ.MF в баночке

<build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <manifestEntries> 
       <Class-Path>./config/</Class-Path> 
      </manifestEntries> 
      </archive> 
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.5.3.RELEASE</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build>