Как изменить местоположение 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>

У меня есть рабочее решение для установки пользовательского пути или изменения существующего пути к файлу журнала. Если вы настроили log4j2.xml-файл, откройте его и посмотрите, где вам нужно сделать одно изменение строки в путь к файлу журнала конфигурации.enter image description here