web-dev-qa-db-ja.com

ktor httpクライアントにリクエストを記録する方法は?

私はこのようなものを手に入れました:

private val client = HttpClient {
    install(JsonFeature) {
        serializer = GsonSerializer()
    }
    install(ExpectSuccess)
}

次のようなリクエストを行います

  private fun HttpRequestBuilder.apiUrl(path: String, userId: String? = null) {
    header(HttpHeaders.CacheControl, "no-cache")
    url {
        takeFrom(endPoint)
        encodedPath = path
    }
}

しかし、要求と応答の本文を確認する必要があります。それを行う方法はありますか?コンソール/ファイル内?

6
Seko

responseHttpReceivePipelineを処理する必要があるようです。 Originの応答を複製して、ログ記録の目的で使用できます。

scope.receivePipeline.intercept(HttpReceivePipeline.Before) { response ->
    val (loggingContent, responseContent) = response.content.split(scope)

    launch {
        val callForLog = DelegatedCall(loggingContent, context, scope, shouldClose = false)
        ....
    }
    ...
}

実装例は次の場所にあります: https://github.com/ktorio/ktor/blob/00369bf3e41e91d366279fce57b8f4c97f927fd4/ktor-client/ktor-client-core/src/io/ktor/client/features/observer/ ResponseObserver.kt そして次のマイナーリリースでクライアント機能として利用可能になるでしょう。

ところで:リクエストに同じスキームを実装できます。

1
Leonid

Kotlin Loggingをチェックしてください https://github.com/MicroUtils/kotlin-logging 多くのオープンソースフレームワークで使用され、すべてのきれいな印刷を処理します。

次のように簡単に使用できます。

 private val logger = KotlinLogging.logger {  }
 logger.info { "MYLOGGER INFO" }
 logger.warn { "MYLOGGER WARNING" }
 logger.error { "MYLOGGER ERROR" }

これにより、コンソールにメッセージが出力されます。

0