diff --git a/backend/build.gradle.kts b/backend/build.gradle.kts index d0d8918..0a92dc0 100644 --- a/backend/build.gradle.kts +++ b/backend/build.gradle.kts @@ -37,6 +37,7 @@ dependencies { implementation("io.ktor:ktor-server-compression") implementation("io.ktor:ktor-server-netty") 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") testImplementation("io.ktor:ktor-server-test-host") testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") diff --git a/backend/src/main/kotlin/plugins/Errors.kt b/backend/src/main/kotlin/plugins/Errors.kt index e79960f..833928d 100644 --- a/backend/src/main/kotlin/plugins/Errors.kt +++ b/backend/src/main/kotlin/plugins/Errors.kt @@ -1,17 +1,27 @@ package dev.svitan.plugins +import io.github.oshai.kotlinlogging.KotlinLogging import io.ktor.http.HttpStatusCode import io.ktor.server.application.Application +import io.ktor.server.application.InvalidBodyException 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.statuspages.StatusPages +import io.ktor.server.request.httpMethod +import io.ktor.server.request.uri import io.ktor.server.response.respond class AuthorizationException(message: String) : Exception(message) fun Application.configureErrors() { + val logger = KotlinLogging.logger {} + install(StatusPages) { exception { call, cause -> + logger.error(cause) { "${call.request.httpMethod} ${call.request.uri}" } + when (cause) { is IllegalArgumentException -> call.respond( status = HttpStatusCode.BadRequest, @@ -28,6 +38,16 @@ fun Application.configureErrors() { 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( status = HttpStatusCode.InternalServerError, message = cause.message ?: ""