Я только что обновил наш проект Spring Boot с версии 2.1.1.RELEASE до версии 2.2.0.RELEASE и обнаружил критическое изменение в выводе стековой трассировки.
Мне интересно, намеренно ли это отличается илиесли я пропустил критическую точку.
Фон
Допустим, у меня есть WebFilter, отвечающий за регистрацию http-запроса (и его потенциальное исключение)
object RequestLogger : WebFilter {
override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
logRequest(exchange)
return chain.filter(exchange)
.doFinally { logResponse(exchange) }
.doOnError { logError(exchange, it) }
}
// ...
private fun logError(exchange: ServerWebExchange, t: Throwable) {
// t.stacktrace <------- stracktrace outpout taken from this !!!
}
}
Допустим, в нашей доменной модели выдается исключение. Тогда есть заметная разница в выводе стека трассировки между Spring Boot 2.2.x (последняя версия) и 2.1.x (предыдущая ветвь)
Ошибка стека трассировки начиная с 2.2.0
Содержит только две строки:
- FQN класса исключения и сообщения
- вхождение строки исключения
package.path.to.MyDomainException: The Exception Message.
package.path.to.EnsurerKt$ensure$1.invoke(Ensurer.kt:45)
Stacktrace ошибок в 2.1.0 и до
Содержит всю трассировку стека, примерно от 50 до 100 строк.
package.path.to.MyDomainException: The Exception Message.
package.path.to.EnsurerKt$ensure$1.invoke(Ensurer.kt:45)
more lines ...
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:107)
more lines ...
io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
more lines ...
java.base/java.lang.Thread.run(Thread.java:844)
Вопрос
Как я могу снова получить полный выход стека трассировки в Spring Boot 2.2.0?