В вашем приложении у вас есть 2 типа регистраторов.
1 SLF4J (только абстракция, фактическая регистрация не выполняется, поэтому вы можете переключаться на разные реализации)
2 Log4j1 (это - реализация, фактическое ведение журнала осуществляется этим)
В вашем приложении происходит
slf4j-log4j12.jar
- этот jar будет направлять любой вызов, сделанный регистраторам slf4j (org.slf4j.Logger
), вlog4j1.
log4j-over-slf4j.jar
- этот jar будет направлять любой вызов, сделанный регистраторам log4j (org.apache.log4j.Logger
), в slf4j. (Этот jar обычно используется, когда ваше приложение закодировано с регистраторами log4j, и вы хотите перенаправить все тепротоколирование вызовов в SLF4J, так что вы можете изменить каркас журналирования на SLF4J без какого-либо изменения кода).
когда вы используете оба этих jar-файла в classpath, он передает события журналирования между slf4j -> log4j и log4j --> slf4j, поэтому возникает исключение переполнения стека.
В зависимости от ваших требований, хотите ли вы использовать slf4j, или log4j, или log4j-over-slf4j, или slf4j с log4j, вам нужно выбрать правильные зависимости, доступные в пути к классам.Для решения вашей проблемы вам необходимо исключить slf4j-log4j12.jar
или log4j-over-slf4j.jar
из вашего пути к классам.