Skip to content
Server Plugin

呼叫記錄

所需依賴項: io.ktor:ktor-server-call-logging

程式碼範例: logging

原生伺服器
Ktor 支援 Kotlin/Native,讓您無需額外的執行階段或虛擬機器即可執行伺服器。
支援: ✖️

Ktor 提供了使用 SLF4J 函式庫記錄應用程式事件的功能。您可以從 Ktor 伺服器中的記錄 主題了解一般的記錄組態。

CallLogging 外掛程式允許您記錄傳入的客戶端請求。

新增依賴項

若要使用 CallLogging,您需要在建置指令碼中包含 ktor-server-call-logging artifact:

Kotlin
Groovy
XML

安裝 CallLogging

若要將 CallLogging 外掛程式安裝到應用程式中,請將其傳遞給指定

模組
模組允許您透過分組路由來組織應用程式。
中的 install 函式。 以下程式碼片段展示了如何安裝 CallLogging ...

  • ... 在 embeddedServer 函式呼叫內部。
  • ... 在明確定義的 module 內部,該模組是 Application 類別的擴充函式。
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")