2016-11-02 3 views
0

Мы пытаемся создать стартер Springboot, который будет программно создавать конфигурацию log4j2, поэтому разработчикам не нужно беспокоиться о создании файлов log4j2.xml. Проблема в том, что программный API log4j2 изменяется от версии к версии. Мы протестировали наш код с помощью log4j2 версии 2.5 и корректно работаем в автономной среде.Завершение версии log4j2 в стартере Springboot

Теперь мы пытаемся включить наш API в стартер Springboot, поэтому все приложения с пружинным приводом могут включать этот стартер и не нужно беспокоиться о конфигурации log4j.

Проблема, с которой мы сталкиваемся, заключается в том, что Springboot связывает свою собственную версию log4j, и мы не можем контролировать, какую версию Springboot будем использовать.

Есть ли способ, мы можем заставить springboot стартер загрузить версию 2.5 log4j2 еще наш тест Springboot приложение жалуется на какой-то метод не нашел в log4j

ответ

0

Вы можете переопределить версии зависимостей, объявив их в вашем файлы maven pom или файлы градиента.

В мавена, чтобы включить log4j2 зависимости вы будете исключающей Logback по умолчанию Регистратор, а затем добавляя следующий зависимости

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-log4j2</artifactId> 
</dependency> 

Если проверить содержание этого стартера П, вы можете увидеть следующие зависимости в нем

<dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-slf4j-impl</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jul-to-slf4j</artifactId> 
    </dependency> 

чтобы переопределить любого из этих зависимостей, в которых управляется версия, вы можете переопределить эту зависимость в файле и п обеспечивает «версию» тег для него. Просто укажите это

<dependency> 
<groupId>org.apache.logging.log4j</groupId> 
<artifactId>log4j-api</artifactId> 
<version>2.5</version> 
</dependency> 
<dependency> 
<groupId>org.apache.logging.log4j</groupId> 
<artifactId>log4j-core</artifactId> 
<version>2.5</version> 
</dependency> 

в вашем файле pom. Инструменты управления зависимостями, такие как Maven и Gradle, поддерживают этот тип переопределения.

+0

Спасибо за ответ. Мы заметили, что если мы установим зависимости log4j2 в приложении Springboot, использующем наш стартер, тогда все будет работать нормально. Это, однако, не является желательным решением. Мы хотим установить зависимости в стартере, поэтому конечное приложение может использовать правильную версию log4j2. Однако, когда мы устанавливаем зависимости версии log4j2 в нашем стартере, конечное приложение использует версию log4j2, которая поставляется с версией Springboot, а не то, что мы установили. –

+0

Ваше приложение для загрузки весны не использует стартер с пружинным загрузчиком и использует «ваш» стартер? Не могли бы вы разместить некоторые подробности о вашей структуре проекта, поместьях и т. Д. –

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