Log the client requests

预计阅读时间:2分钟

您可能想记录客户请求:而呼叫记录功能正是这样做的. 它使用了使用LoggerFactory.getLogger("Application")ApplicationEnvironment.logLoggerFactory.getLogger("Application") ),因此您可以轻松配置输出. 有关登录Ktor的更多信息,请检查ktor页面中的日志 .

此功能在io.ktor.features.CallLogging类中io.ktor.features.CallLogging ,不需要其他构件.

Basic usage

基本的未配置功能使用TRACE级别记录每个请求:

install(CallLogging)

Configuring

此功能使您可以配置日志级别并过滤正在记录的请求:

install(CallLogging) {
    level = Level.INFO
    filter { call -> call.request.path().startsWith("/section1") }
    filter { call -> call.request.path().startsWith("/section2") }
    // ...
}

filter方法保留过滤器的白名单列表. 如果未定义过滤器,则将记录所有内容. 如果有过滤器,如果其中任何一个返回true,则将记录该呼叫.

在示例中,它将记录: /section1/*/section2/*请求.

MDC

CallLogging功能支持CallLogging MDC (映射诊断上下文),以将信息关联为请求的一部分.

安装CallLogging时,可以配置参数以使用mdc方法将其与请求关联. 此方法需要一个键名和一个函数提供程序. 在Monitoring管道阶段中,将关联上下文(并调用提供者).

install(CallLogging) {
    mdc(name) { // call: ApplicationCall -> 
        "value"
    }
    // ...
}

MDC使用ThreadLocals进行工作,而Ktor使用未绑定到特定线程的协程. 此功能在内部使用kotlinx.coroutines ThreadContextElement对其进行寻址.

by  ICOPY.SITE