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 内部,该 moduleApplication 类的扩展函数。
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")