Как я могу получить трассировку стека этой ошибки, чтобы исправить ее?

#java #kotlin #ktor

#java #kotlin #ktor

Вопрос:

Привет, я пытаюсь использовать Ktor с помощью Kotlin. Но у меня проблема при доступе к веб-странице с помощью «/».

         embeddedServer(Netty, port) {
            install(FreeMarker) {
                templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates")
                outputFormat = HTMLOutputFormat.INSTANCE
            }
            routing {
                static("/static") {
                    resources("files")
                }
                get("/") {
                    call.respond(FreeMarkerContent("index.ftl", mapOf("entries" to blogEntries), ""))
                }
            }
        }.start(wait = false)
 

Вот мой код, который я использую. Я не могу найти ошибку, в консоли есть только это сообщение:

[eventLoopGroupProxy-4-1] INFO ktor.application - Unhandled: GET - /, io failed

Есть ли у кого-нибудь идея, как я могу исправить эту ошибку?

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

1. Я не знаю эту библиотеку, но похоже, что она обработала исключение внутри. Сообщение представляет собой довольно стандартное сообщение о ведении журнала, если у вас есть какой-то регистратор, настроенный для проекта, вы можете найти там трассировку стека. В противном случае проверьте страницу библиотеки для поддержки сообщества, это может быть распространенной проблемой.

Ответ №1:

Точная строка, в которой генерируется это сообщение, находится в io.ktor.server.engine.logFailure : https://github.com/ktorio/ktor/blob/2e1b0046e4235865da7cbbfbf2e887f410775278/ktor-server/ktor-server-host-common/jvm/src/io/ktor/server/engine/DefaultEnginePipeline.kt#L107

 private fun ApplicationEnvironment.logFailure(call: ApplicationCall, cause: Throwable) {
   ...
            is IOException -> log.info("$status: $logString, io failed: ${cause.message ?: "unknown error"}")
   ...
}
 

Добавьте точку останова в эту строку. Затем, когда ваше приложение завершится с ошибкой, cause оно будет содержать реальное исключение.

В моем случае это была ошибка в шаблоне FreeMarker. Что странно, потому что обычно эти исключения печатаются нормально. На этот раз он только напечатан Unhandled: <route>, io failed .

Похоже, что это ошибка в Ktor: эти исключения генерируются в обычном режиме и достаточно часто, чтобы вы не хотели полную трассировку стека. Но иногда (как в этом случае) исключение не является нормальным, и вам нужна трассировка стека.

Ответ №2:

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