Переполнение стека загрузки Spring с помощью log4j

У меня есть модульный тест, и единственное, что я получаю, это переполнение стека следующим образом:

java.lang.StackOverflowError
    at org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:125)
    at org.apache.logging.log4j.util.StackLocatorUtil.getCallerClass(StackLocatorUtil.java:55)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:42)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
... many more

Я пытаюсь использовать log4j и slf4j. Я исключил logback, если я не получаю другую ошибку о приведении контекста log4j к контексту slf4j.

Я сократил файл build.gradle до минимума зависимостей:

testCompile ('org.springframework.boot:spring-boot-starter-test'){
    exclude group: 'ch.qos.logback', module: 'logback-classic'
}
testCompile 'com.fedex.gss.extras:gss-extras-base'
testCompile 'org.mockito:mockito-core'
testCompile('junit:junit')

плюс импорт спецификации для log4j и springboot.

Любые идеи?

Большое спасибо.

Можем ли мы увидеть ваш код, чтобы можно было предложить подходящее решение, пожалуйста

jr593 28.02.2019 09:55

Это может быть связано: slf4j.org/codes.html (ищите «StackOverflowError») и stackoverflow.com/questions/32366586/using-log4j2-with-slf4j.

Arnaud 28.02.2019 09:57

Как упоминал @Arnaud, это обычно вызвано наличием обоих log4j-over-slf4j как slf4j-log4j. Первый гарантирует, что весь прямой доступ к log4j будет проходить через slf4j, а второй является связующим звеном между slf4j и log4j. Если вы объедините и то, и другое, вы окажетесь в бесконечном цикле между вызовами от slf4j к log4j и наоборот. С помощью gradle dependencies вы сможете узнать, откуда берется другая зависимость, и сможете ее исключить.

g00glen00b 28.02.2019 11:27

Спасибо, в итоге разобрался. Решение состояло в том, чтобы добавить следующие исключения к spring-boot-starters: exclude group: 'ch.qos.logback', module: 'logback-classic' exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' Затем добавить дополнительную зависимость compile 'org.slf4j:slf4j-jdk14' Спасибо всем вам.

user2120275 01.03.2019 14:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
2 223
0

Другие вопросы по теме