Как изменить местоположение log4j2 по умолчанию.xml в Java Spring Boot?
Log4j2 отлично работает с весенней загрузкой через log4j2.xml
файл конфигурации в корневом пути к классам, точно так же, как указано в документации.
при попытке переместить этот файл в другое место, хотя, я не могу передать новое местоположение Spring при запуске. От документация:
различные системы регистрации могут быть активированы путем включения соответствующие библиотеки на пути к классам и далее настраиваются предоставление подходящего файла конфигурации в корневом каталоге пути к классам, или в месте, указанном свойством среды Spring
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.
4 ответов
Как указано в Весенняя справочная документация, the logging.config
свойство не может быть установлено среди свойств приложения, так как они считываются после того, как журнал уже был инициализирован.
решение состоит в том, чтобы предоставить путь к конфигурации внешнего ведения журнала таким образом:
java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar
ответ micpalmia - Это абсолютно правильно.
Мне нужно было поместить конфигурацию вне пути к классам, я не хотел передавать файл конфигурации в качестве параметра. Поэтому я поместил очень простую конфигурацию ведения журнала в ресурсы classpath и перенастроил приложение spring boot logging при запуске, например:
@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");
// ...
}
}
этот подход имеет существенный недостаток: весь процесс загрузки приложений не будет регистрироваться как внешне сконфигурированный. Но как только пользовательский код запущен, регистратор работает по назначению. Хотя вы не можете,я считаю, что это компромисс, с которым я могу жить.
у меня такая же проблема в моем проекте, кроме log4j2.xml мне также нужны другие файлы конфигурации в пути к классу. Вот мои 2 решения, которые работают:
Soluation 1: Запустите приложение spring boot с помощью org.springframework.сапог.погрузчик.JarLauncher
java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher
решение 2: Напишите a './ 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>