🐛 Adds error logging for exceptions

This commit is contained in:
2026-04-16 20:32:32 +02:00
parent 995b6ed677
commit b8767a909a
2 changed files with 21 additions and 0 deletions
+1
View File
@@ -37,6 +37,7 @@ dependencies {
implementation("io.ktor:ktor-server-compression") implementation("io.ktor:ktor-server-compression")
implementation("io.ktor:ktor-server-netty") implementation("io.ktor:ktor-server-netty")
implementation("ch.qos.logback:logback-classic:$logback_version") implementation("ch.qos.logback:logback-classic:$logback_version")
implementation("io.github.oshai:kotlin-logging-jvm:7.0.3")
implementation("io.github.cdimascio:dotenv-kotlin:6.5.1") implementation("io.github.cdimascio:dotenv-kotlin:6.5.1")
testImplementation("io.ktor:ktor-server-test-host") testImplementation("io.ktor:ktor-server-test-host")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
+20
View File
@@ -1,17 +1,27 @@
package dev.svitan.plugins package dev.svitan.plugins
import io.github.oshai.kotlinlogging.KotlinLogging
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.server.application.Application import io.ktor.server.application.Application
import io.ktor.server.application.InvalidBodyException
import io.ktor.server.application.install import io.ktor.server.application.install
import io.ktor.server.application.log
import io.ktor.server.plugins.BadRequestException
import io.ktor.server.plugins.NotFoundException import io.ktor.server.plugins.NotFoundException
import io.ktor.server.plugins.statuspages.StatusPages import io.ktor.server.plugins.statuspages.StatusPages
import io.ktor.server.request.httpMethod
import io.ktor.server.request.uri
import io.ktor.server.response.respond import io.ktor.server.response.respond
class AuthorizationException(message: String) : Exception(message) class AuthorizationException(message: String) : Exception(message)
fun Application.configureErrors() { fun Application.configureErrors() {
val logger = KotlinLogging.logger {}
install(StatusPages) { install(StatusPages) {
exception<Throwable> { call, cause -> exception<Throwable> { call, cause ->
logger.error(cause) { "${call.request.httpMethod} ${call.request.uri}" }
when (cause) { when (cause) {
is IllegalArgumentException -> call.respond( is IllegalArgumentException -> call.respond(
status = HttpStatusCode.BadRequest, status = HttpStatusCode.BadRequest,
@@ -28,6 +38,16 @@ fun Application.configureErrors() {
message = cause.message ?: "" message = cause.message ?: ""
) )
is BadRequestException -> call.respond(
status = HttpStatusCode.BadRequest,
message = cause.message ?: ""
)
is InvalidBodyException -> call.respond(
status = HttpStatusCode.BadRequest,
message = cause.message ?: ""
)
else -> call.respond( else -> call.respond(
status = HttpStatusCode.InternalServerError, status = HttpStatusCode.InternalServerError,
message = cause.message ?: "" message = cause.message ?: ""