호출 로깅
필수 의존성: 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")