コールロギング
必須の依存関係: io.ktor:ktor-server-call-logging
コード例: logging
Ktorは、SLF4Jライブラリを使用してアプリケーションイベントをログに記録する機能を提供します。 一般的なロギング設定については、Ktorサーバーでのロギングのトピックで詳しく学ぶことができます。
CallLoggingプラグインを使用すると、クライアントからのリクエストをログに記録できます。
依存関係の追加
CallLoggingを使用するには、ビルドスクリプトにktor-server-call-loggingアーティファクトを含める必要があります。
CallLogging のインストール
CallLoggingプラグインをアプリケーションにインストールするには、指定された
install関数に渡します。 以下のコードスニペットは、CallLoggingをインストールする方法を示しています... - ...
embeddedServer関数の呼び出し内。 - ... 明示的に定義された
module(Applicationクラスの拡張関数)内。
ロギング設定の構成
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")