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