Skip to content
Client Plugin

Ktor Client でのロギング

必須の依存関係: io.ktor:ktor-client-logging

コード例: client-logging

ロギングは、重要なイベント、エラー、または情報メッセージを記録することで、プログラムが何を行っているかを追跡し、問題を診断する方法です。

Ktor は、Logging プラグインを使用して HTTP 呼び出しをログに記録する機能を提供します。 このプラグインは、プラットフォームごとに異なるロガータイプを提供します。

サーバー側では、Ktor はアプリケーションロギング用に Logging プラグインを、クライアントリクエストのロギング用に CallLogging プラグインを提供しています。

JVM

JVM では、Ktor はロギングの抽象化レイヤーとして Simple Logging Facade for Java (SLF4J) を使用します。 SLF4J はロギング API を基盤となるロギング実装から分離し、アプリケーションの要件に最適なロギングフレームワークを統合できるようにします。 一般的な選択肢には LogbackLog4j があります。フレームワークが提供されない場合、SLF4J はデフォルトで no-operation (NOP) 実装を使用し、実質的にロギングを無効にします。

ロギングを有効にするには、Logback などの必要な SLF4J 実装を含むアーティファクトを含めてください:

Kotlin
Groovy
XML

Android

Android では、SLF4J Android ライブラリを使用することをお勧めします:

Kotlin
Groovy

Native

Native ターゲットの場合、Logging プラグインはすべてを標準出力ストリーム (STDOUT) に出力するロガーを提供します。

Multiplatform

マルチプラットフォームプロジェクトでは、Napier などのカスタムロガーを指定できます。

依存関係の追加

Logging プラグインを追加するには、ビルドスクリプトに以下のアーティファクトを含めます:

Kotlin
Groovy
XML

TIP

Ktor クライアントに必要なアーティファクトの詳細については、
クライアントの依存関係の追加
既存のプロジェクトにクライアントの依存関係を追加する方法を学びます。
を参照してください。

Logging のインストール

Logging をインストールするには、クライアント設定ブロック内の install 関数に渡します:

kotlin
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
//...
val client = HttpClient(CIO) {
    install(Logging)
}

Logging の設定

Logging プラグインの設定は、Logging.Config クラスによって提供されます。以下の例は、設定のサンプルを示しています:

logger : ロガーインスタンスを指定します。Logger.DEFAULT は SLF4J ロギングフレームワークを使用します。Native ターゲットの場合は、このプロパティを Logger.SIMPLE に設定します。

level : ロギングレベルを指定します。LogLevel.HEADERS はリクエスト/レスポンスのヘッダーのみをログに記録します。

filter() : 指定された述語に一致するリクエストのログメッセージをフィルタリングできます。以下の例では、ktor.io へのリクエストのみがログに記録されます。

sanitizeHeader() : 機密性の高いヘッダーをサニタイズして、その値がログに表示されないようにします。以下の例では、Authorization ヘッダーの値がログに記録される際に '***' に置き換えられます。

kotlin
package com.example

import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {
        val client = HttpClient(CIO) {
            install(Logging) {
                logger = Logger.DEFAULT
                level = LogLevel.HEADERS
                filter { request ->
                    request.url.host.contains("ktor.io")
                }
                sanitizeHeader { header -> header == HttpHeaders.Authorization }
            }
        }

        val response1: HttpResponse = client.get("https://ktor.io/")
        val response2: HttpResponse = client.get("https://jetbrains.com/")
    }
}

完全な例については、client-logging を参照してください。

カスタムロガーの提供

クライアントアプリケーションでカスタムロガーを使用するには、Logger インスタンスを作成し、log 関数をオーバーライドする必要があります。 以下の例は、Napier ライブラリを使用して HTTP 呼び出しをログに記録する方法を示しています:

kotlin
package com.example

import io.github.aakira.napier.DebugAntilog
import io.github.aakira.napier.Napier
import io.ktor.client.*
import io.ktor.client.engine.cio.*
import io.ktor.client.plugins.logging.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import kotlinx.coroutines.runBlocking

fun main() {
    runBlocking {
        val client = HttpClient(CIO) {
            install(Logging) {
                logger = object: Logger {
                    override fun log(message: String) {
                        Napier.v("HTTP Client", null, message)
                    }
                }
                level = LogLevel.HEADERS
            }
        }.also { Napier.base(DebugAntilog()) }

        val response: HttpResponse = client.get("https://ktor.io/")
    }
}

完全な例については、client-logging-napier を参照してください。