Skip to content
Server Plugin

コールロギング

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

コード例: logging

Nativeサーバー
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
のサポート: ✖️

Ktorは、SLF4Jライブラリを使用してアプリケーションイベントをログに記録する機能を提供します。 一般的なロギング設定については、Ktorサーバーでのロギングのトピックで詳しく学ぶことができます。

CallLoggingプラグインを使用すると、クライアントからのリクエストをログに記録できます。

依存関係の追加

CallLoggingを使用するには、ビルドスクリプトにktor-server-call-loggingアーティファクトを含める必要があります。

Kotlin
Groovy
XML

CallLogging のインストール

CallLoggingプラグインをアプリケーションにインストールするには、指定された

モジュール
Modules allow you to structure your application by grouping routes.
内のinstall関数に渡します。 以下のコードスニペットは、CallLoggingをインストールする方法を示しています...

  • ... embeddedServer関数の呼び出し内。
  • ... 明示的に定義されたmoduleApplicationクラスの拡張関数)内。
kotlin
kotlin

ロギング設定の構成

CallLoggingは、ログレベルの指定、特定条件に基づくリクエストのフィルタリング、ログメッセージのカスタマイズなど、さまざまな方法で構成できます。利用可能な設定項目は、CallLoggingConfigで確認できます。

ログレベルの設定

デフォルトでは、KtorはLevel.INFOログレベルを使用します。これを変更するには、levelプロパティを使用します。

kotlin
install(CallLogging) {
    level = Level.INFO
}

リクエストのフィルタリング

filterプロパティを使用すると、リクエストをフィルタリングするための条件を追加できます。以下の例では、/api/v1へのリクエストのみがログに記録されます。

kotlin
install(CallLogging) {
    filter { call ->
        call.request.path().startsWith("/api/v1")
    }
}

ログメッセージのフォーマットをカスタマイズする

format関数を使用すると、リクエストやレスポンスに関連する任意のデータをログに含めることができます。以下の例では、各リクエストに対してレスポンスステータス、HTTPメソッド、およびUser-Agentヘッダーの値をログに記録する方法を示しています。

kotlin
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に追加しています。

kotlin
install(CallLogging) {
    mdc("name-parameter") { call ->
        call.request.queryParameters["name"]
    }
}

追加された値には、ApplicationCallの生存期間(ライフタイム)中にアクセスできます。

kotlin
import org.slf4j.MDC
// ...
MDC.get("name-parameter")