コールロギング
必要な依存関係: 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")