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
内部,该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")