ClassNotFoundException: org.apache.logging.log4j.util.StackLocator $ FqcnCallerLocator при загрузке spring 2.3.4 и log4j 2.13.3

#spring #spring-boot #log4j

#весна #весенняя загрузка #log4j

Вопрос:

Я пытаюсь запустить log4j 2.13.3 (последняя версия) с spring boot 2.3.4.RELEASE (последняя версия), но при запуске моего приложения я получаю следующую ошибку:

 mix-data-collector_1     | ------------------------------------------------------------------------
mix-data-collector_1     | OpenJDK 64-Bit Server VM warning: Ignoring option PermSize; support was removed in 8.0
mix-data-collector_1     | DB update completed
mix-data-collector_1     | DB migration finished
mix-data-collector_1     | Start Mix Data Collector---------------------------------------------
mix-data-collector_1     | Listening for transport dt_socket at address: 5555
mix-data-collector_1     | Exception in thread "main" java.lang.reflect.InvocationTargetException
mix-data-collector_1     |      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
mix-data-collector_1     |      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
mix-data-collector_1     |      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
mix-data-collector_1     |      at java.base/java.lang.reflect.Method.invoke(Method.java:566)
mix-data-collector_1     |      at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
mix-data-collector_1     loader.Launcher.launch(Launcher.java:87)
mix-data-collector_1     |      at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
mix-data-collector_1     |      at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
mix-data-collector_1     | Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/util/StackLocator$FqcnCallerLocator
mix-data-collector_1     |      at org.apache.logging.log4j.util.StackLocator.<clinit>(StackLocator.java:37)
mix-data-collector_1     |      at org.apache.logging.log4j.util.StackLocatorUtil.<clinit>(StackLocatorUtil.java:33)
mix-data-collector_1     |      at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:133)
mix-data-collector_1     |      at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:228)
mix-data-collector_1     |      at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
mix-data-collector_1     |      at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
mix-data-collector_1     |      at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.getLoggerContext(Log4J2LoggingSystem.java:305)
mix-data-collector_1     |      at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.beforeInitialize(Log4J2LoggingSystem.java:145)
mix-data-collector_1     |      at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:232)
mix-data-collector_1     |      at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:213)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
mix-data-collector_1     |      at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:74)
mix-data-collector_1     |      at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:47)
mix-data-collector_1     |      at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
mix-data-collector_1     |      at ch.sbb.esta.openshift.gracefullshutdown.GracefulshutdownSpringApplication.run(GracefulshutdownSpringApplication.java:21)
mix-data-collector_1     |      at com.nuance.core.mix.data.collector.Application.main(Application.java:38)
mix-data-collector_1     |      ... 8 more
mix-data-collector_1     | Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.util.StackLocator$FqcnCallerLocator
mix-data-collector_1     |      at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
mix-data-collector_1     |      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
mix-data-collector_1     |      at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
mix-data-collector_1     |      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
mix-data-collector_1     |      ... 27 more
mix-data-collector_mix-data-collector_1 exited with code 1loader.Launcher.launch(Launcher.java:87)
mix-data-collector_1     |      at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
mix-data-collector_1     |      at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
mix-data-collector_1     | Caused by: java.lang.NoClassDefFoundError: org/apache/logging/log4j/util/StackLocator$FqcnCallerLocator
mix-data-collector_1     |      at org.apache.logging.log4j.util.StackLocator.<clinit>(StackLocator.java:37)
mix-data-collector_1     |      at org.apache.logging.log4j.util.StackLocatorUtil.<clinit>(StackLocatorUtil.java:33)
mix-data-collector_1     |      at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:133)
mix-data-collector_1     |      at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:228)
mix-data-collector_1     |      at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
mix-data-collector_1     |      at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
mix-data-collector_1     |      at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.getLoggerContext(Log4J2LoggingSystem.java:305)
mix-data-collector_1     |      at org.springframework.boot.logging.log4j2.Log4J2LoggingSystem.beforeInitialize(Log4J2LoggingSystem.java:145)
mix-data-collector_1     |      at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:232)
mix-data-collector_1     |      at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:213)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
mix-data-collector_1     |      at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
mix-data-collector_1     |      at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:74)
mix-data-collector_1     |      at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:47)
mix-data-collector_1     |      at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
mix-data-collector_1     |      at ch.sbb.esta.openshift.gracefullshutdown.GracefulshutdownSpringApplication.run(GracefulshutdownSpringApplication.java:21)
mix-data-collector_1     |      at com.nuance.core.mix.data.collector.Application.main(Application.java:38)
mix-data-collector_1     |      ... 8 more
mix-data-collector_1     | Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.util.StackLocator$FqcnCallerLocator
mix-data-collector_1     |      at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
mix-data-collector_1     |      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
mix-data-collector_1     |      at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
mix-data-collector_1     |      at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
mix-data-collector_1     |      ... 27 more
mix-data-collector_mix-data-collector_1 exited with code 1
  

Мои зависимости maven выглядят так:

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>${log4j.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
</dependency>
  

С log4j 2.11.2 приложение запускается нормально (так что в последней версии log4j что-то изменилось), но мне нужно перейти на версию 2.13.3, чтобы смягчить некоторые проблемы безопасности.
Есть идеи, как я могу решить эту проблему?

Спасибо введите описание изображения здесь

последние зависимости: введите описание изображения здесь

Комментарии:

1. Удалите org.apache.logging.log4j зависимости, добавьте log4j2.version в свои свойства. Кроме того, сама Spring Boot 2.3.4 уже включает Log4j2 2.13.3 в качестве зависимости.

2. Я удалил org.apache. зависимости logging.log4j, add добавил log4j2.version, я перекомпилировал, но я все еще получаю ту же ошибку при запуске

3. Вам не нужна версия, поскольку Spring Boot уже использует нужную вам версию. Посмотрите на это . Если это не та версия, которая включена, то что-то другое должно переопределять ее.

4. Я удалил версию из своих свойств, но все еще вижу ту же ошибку . И из того, что я вижу, в моем проекте нет другой версии log4j. Так что это должно быть что-то с этой версией 2.13.3 IMO.

5. Очистите свой репозиторий и повторно загрузите, может быть заблокированный jar.

Ответ №1:

Хорошо, я нашел свою проблему. Кажется, была также зависимость от плагина spring maven, которая вызывала проблему. Спасибо за помощь

Комментарии:

1. Я столкнулся с той же проблемой. Не могли бы вы предоставить информацию о том, в чем заключалась проблема и как вы ее решили

2. Просто убедитесь, что все ваши зависимости, связанные с spring, обновлены.

Ответ №2:

Я решил ту же проблему, обновив зависимость log4j-code до версии 2.14.1