You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Ktor客户端日志配置为单行输出格式?

如何将Ktor客户端日志中的REQUEST/RESPONSE与METHOD合并为单行输出

环境与当前配置

使用ktor-client-core:2.3.2和ktor-client-logging:2.3.2插件,现有配置如下:

Ktor客户端代码

val httpClient = HttpClient(engine) {
    install(Logging) {
        level = LogLevel.INFO
    }
}

Logback配置文件

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %highlight(%-5level) --- [%25.25thread]  %cyan(%-36.36logger): %msg %n</pattern>
        </encoder>
    </appender>
</configuration>

当前日志输出中,REQUEST/RESPONSE信息与METHOD信息分属两行,期望实现如下单行输出:

2023-07-11 16:34:00.370 INFO  --- [her-worker-1 @coroutine#1]  io.ktor.client.HttpClient           : REQUEST: http://localhost:1234/test METHOD: HttpMethod(value=POST) 
2023-07-11 16:34:01.004 INFO  --- [her-worker-3 @coroutine#1]  io.ktor.client.HttpClient           : RESPONSE: 200 OK METHOD: HttpMethod(value=POST)

解决方案

可以通过Ktor的AdvancedLogging插件实现该需求,这是2.x版本中更灵活的日志控制方案,具体步骤如下:

1. 确认依赖

确保项目中引入了ktor-client-logging-jvm依赖(Gradle示例):

implementation("io.ktor:ktor-client-logging-jvm:2.3.2")

2. 替换Logging插件为AdvancedLogging

修改Ktor客户端配置,使用AdvancedLogging替代默认的Logging插件,自定义请求和响应的日志格式:

val httpClient = HttpClient(engine) {
    install(AdvancedLogging) {
        logger = LoggerFactory.getLogger("io.ktor.client.HttpClient")
        level = LogLevel.INFO
        // 可选:过滤需要日志的请求,这里默认记录所有请求
        filter { true }
        // 按需开启请求/响应内容日志,默认关闭
        logRequestContent = false
        logResponseContent = false

        // 自定义请求日志内容,合并URL与方法
        logRequest { request ->
            "REQUEST: ${request.url} METHOD: ${request.method}"
        }

        // 自定义响应日志内容,合并状态与请求方法
        logResponse { response ->
            "RESPONSE: ${response.status} METHOD: ${response.request.method}"
        }
    }
}

3. 保持Logback配置不变

上述配置生成的日志消息已经是合并后的单行内容,原Logback的格式配置无需修改,即可输出符合预期的日志。


内容的提问来源于stack exchange,提问作者Maicol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:22:58