调用日志
所需依赖项:io.ktor:ktor-server-call-logging
代码示例: logging
Ktor 提供了使用 SLF4J 库记录应用事件的功能。您可以从 Ktor 服务器中的日志记录主题中了解常规日志配置。
CallLogging 插件允许您记录传入的客户端请求。
添加依赖项
要使用 CallLogging,您需要在构建脚本中包含 ktor-server-call-logging 构件:
安装 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")