Skip to content
Server Plugin

호출 로깅

필수 의존성: io.ktor:ktor-server-call-logging

코드 예시: logging

네이티브 서버
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
지원: ✖️

Ktor는 SLF4J 라이브러리를 사용하여 애플리케이션 이벤트를 로깅하는 기능을 제공합니다. 일반적인 로깅 설정에 대한 자세한 내용은 Ktor 서버의 로깅 토픽에서 확인할 수 있습니다.

CallLogging 플러그인을 사용하면 들어오는 클라이언트 요청을 로깅할 수 있습니다.

의존성 추가

CallLogging을(를) 사용하려면 빌드 스크립트에 ktor-server-call-logging 아티팩트를 포함해야 합니다.

Kotlin
Groovy
XML

CallLogging 설치

애플리케이션에 CallLogging 플러그인을 설치하려면, 지정된

모듈
Modules allow you to structure your application by grouping routes.
install 함수에 전달하세요. 아래 코드 스니펫은 CallLogging을(를) 설치하는 방법을 보여줍니다...

  • ... embeddedServer 함수 호출 내에서.
  • ... Application 클래스의 확장 함수인 명시적으로 정의된 module 내에서.
kotlin
kotlin

로깅 설정 구성

CallLogging은(는) 다양한 방법으로 구성할 수 있습니다. 로깅 레벨 지정, 특정 조건에 따른 요청 필터링, 로그 메시지 사용자 지정 등이 가능합니다. 사용 가능한 구성 설정은 CallLoggingConfig에서 확인할 수 있습니다.

로깅 레벨 설정

기본적으로 Ktor는 Level.INFO 로깅 레벨을 사용합니다. 이를 변경하려면 level 속성을 사용하세요.

kotlin
install(CallLogging) {
    level = Level.INFO
}

로그 요청 필터링

filter 속성을 사용하면 요청 필터링을 위한 조건을 추가할 수 있습니다. 아래 예시에서는 /api/v1로 전송된 요청만 로그에 기록됩니다.

kotlin
install(CallLogging) {
    filter { call ->
        call.request.path().startsWith("/api/v1")
    }
}

로그 메시지 형식 사용자 지정

format 함수를 사용하여 요청/응답과 관련된 모든 데이터를 로그에 기록할 수 있습니다. 아래 예시는 각 요청에 대한 응답 상태, 요청 HTTP 메서드 및 User-Agent 헤더 값을 로깅하는 방법을 보여줍니다.

kotlin
install(CallLogging) {
    format { call ->
        val status = call.response.status()
        val httpMethod = call.request.httpMethod.value
        val userAgent = call.request.headers["User-Agent"]
        "Status: $status, HTTP method: $httpMethod, User agent: $userAgent"
    }
}

전체 예시는 다음에서 확인할 수 있습니다: logging.

호출 파라미터를 MDC에 추가

CallLogging 플러그인은 MDC(Mapped Diagnostic Context)를 지원합니다. mdc 함수를 사용하여 지정된 이름으로 원하는 컨텍스트 값을 MDC에 추가할 수 있습니다. 예를 들어, 아래 코드 스니펫에서는 name 쿼리 파라미터가 MDC에 추가됩니다.

kotlin
install(CallLogging) {
    mdc("name-parameter") { call ->
        call.request.queryParameters["name"]
    }
}

ApplicationCall 수명 주기 동안 추가된 값에 접근할 수 있습니다.

kotlin
import org.slf4j.MDC
// ...
MDC.get("name-parameter")