콜 로깅
필수 의존성: io.ktor:ktor-server-call-logging
코드 예제: logging
Ktor는 SLF4J 라이브러리를 사용하여 애플리케이션 이벤트를 로깅하는 기능을 제공합니다. 일반적인 로깅 구성에 대해서는 Ktor 서버의 로깅 주제에서 확인할 수 있습니다.
CallLogging 플러그인을 사용하면 들어오는 클라이언트 요청을 로깅할 수 있습니다.
의존성 추가
CallLogging을 사용하려면 빌드 스크립트에 ktor-server-call-logging 아티팩트를 포함해야 합니다:
CallLogging 설치
애플리케이션에 CallLogging 플러그인을 설치하려면, 지정된
install 함수에 해당 플러그인을 전달하세요. 아래 코드 스니펫은 CallLogging을 설치하는 방법을 보여줍니다... - ...
embeddedServer함수 호출 내부에서. - ...
Application클래스의 확장 함수인 명시적으로 정의된module내부에서.
로깅 설정 구성
CallLogging은 로깅 수준 지정, 특정 조건에 따른 요청 필터링, 로그 메시지 사용자 정의 등 다양한 방법으로 구성할 수 있습니다. 사용 가능한 구성 설정은 CallLoggingConfig에서 확인할 수 있습니다.
로깅 수준 설정
기본적으로 Ktor는 Level.INFO 로깅 수준을 사용합니다. 이를 변경하려면 level 속성을 사용하세요:
install(CallLogging) {
level = Level.INFO
}로그 요청 필터링
filter 속성을 사용하면 요청 필터링을 위한 조건을 추가할 수 있습니다. 아래 예제에서는 /api/v1으로 들어오는 요청만 로그에 기록됩니다:
install(CallLogging) {
filter { call ->
call.request.path().startsWith("/api/v1")
}
}로그 메시지 포맷 사용자 정의
format 함수를 사용하면 요청/응답과 관련된 모든 데이터를 로그에 담을 수 있습니다. 아래 예제는 각 요청에 대해 응답 상태, HTTP 메서드, User-Agent 헤더 값을 로깅하는 방법을 보여줍니다.
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에 추가됩니다:
install(CallLogging) {
mdc("name-parameter") { call ->
call.request.queryParameters["name"]
}
}추가된 값은 ApplicationCall 수명 주기 동안 접근할 수 있습니다:
import org.slf4j.MDC
// ...
MDC.get("name-parameter")