呼叫記錄
所需依賴項: io.ktor:ktor-server-call-logging
程式碼範例: logging
Ktor 提供了使用 SLF4J 函式庫記錄應用程式事件的功能。您可以從 Ktor 伺服器中的記錄 主題了解一般的記錄組態。
CallLogging 外掛程式允許您記錄傳入的客戶端請求。
新增依賴項
若要使用 CallLogging
,您需要在建置指令碼中包含 ktor-server-call-logging
artifact:
安裝 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")