Skip to content
Server Plugin

调用日志

所需依赖项io.ktor:ktor-server-call-logging

代码示例 logging

原生服务器
Ktor supports Kotlin/Native and allows you to run a server without an additional runtime or virtual machine.
支持:✖️

Ktor 提供了使用 SLF4J 库记录应用事件的功能。您可以从 Ktor 服务器中的日志记录主题中了解常规日志配置。

CallLogging 插件允许您记录传入的客户端请求。

添加依赖项

要使用 CallLogging,您需要在构建脚本中包含 ktor-server-call-logging 构件:

Kotlin
Groovy
XML

安装 CallLogging

要将 CallLogging 插件安装到应用,请将其传递给指定

模块
Modules allow you to structure your application by grouping routes.
中的 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")