Похоже, что проблема довольно прямолинейная, но я бы хотел записать трассировку стека, когда запускается обработчик ошибок верхнего уровня в Scalatra. Я намеренно бросаю исключение в одном из моих методов, делая что-то, как тривиальное, как:Scala: распечатать трассировку стека в моем приложении Scalatra
throw new IllegalArgumentException
В обработчик ошибок, код выглядит следующим образом:
error {
case e => {
val logger = LoggerFactory.getLogger(getClass)
logger.info("an exception occurred: " + e.getStackTrace())
logger.info("the request body is: " + request)
NotFound("An error occurred, please contact support")
}
}
обработчик ошибок сам по себе является Скалатра специфична, но я уверен, что ответ, который я ищу, можно решить, используя любой ванильный метод Scala. Есть ли что-то, что я могу сделать в этот момент, чтобы захватить стек? Я не уверен, что запрос находится в том же потоке, что и обработчик ошибок, иначе может быть какой-то ответ. e.getStackTrace()
дает мне [Ljava.lang.StackTraceElement;@1f6b6954
Какой лучший способ получить трассировку стека здесь распечатан, чтобы я мог регистрировать и просматривать его, чтобы исправить ошибки в моем ужасном коде?
Приведенный выше пример не печатает stacktrace. – Luniam
@ Luniam Я отредактировал ответ, дающий полный пример – dsantaolalla