in ktor-client/ktor-client-features/ktor-client-logging/common/src/io/ktor/client/features/logging/Logging.kt [157:217]
override fun install(feature: Logging, scope: HttpClient) {
scope.sendPipeline.intercept(HttpSendPipeline.Monitoring) {
val response = if (feature.filters.isEmpty() || feature.filters.any { it(context) }) {
try {
feature.beginLogging()
feature.logRequest(context)
} catch (_: Throwable) {
null
} finally {
feature.doneLogging()
}
} else null
try {
proceedWith(response ?: subject)
} catch (cause: Throwable) {
feature.logRequestException(context, cause)
throw cause
} finally {
}
}
scope.receivePipeline.intercept(HttpReceivePipeline.State) {
try {
feature.beginLogging()
feature.logResponse(context.response)
proceedWith(subject)
} catch (cause: Throwable) {
feature.logResponseException(context, cause)
throw cause
} finally {
if (!feature.level.body) {
feature.doneLogging()
}
}
}
scope.responsePipeline.intercept(HttpResponsePipeline.Receive) {
try {
proceed()
} catch (cause: Throwable) {
feature.logResponseException(context, cause)
throw cause
}
}
if (!feature.level.body) {
return
}
val observer: ResponseHandler = {
try {
feature.logResponseBody(it.contentType(), it.content)
} catch (_: Throwable) {
} finally {
feature.doneLogging()
}
}
ResponseObserver.install(ResponseObserver(observer), scope)
}