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

Ballerina中如何在同一条日志中同时记录请求信息与响应状态码?

合并Ballerina HTTP请求与响应日志的解决方案

要把请求和响应信息合并到同一条日志里,核心是利用http:FilterContext在请求和响应阶段共享数据,具体实现步骤如下:

  • 在请求过滤函数中,将需要的请求信息存入FilterContext
  • 在响应过滤函数中,从FilterContext取出请求信息,结合响应状态码打印合并后的日志

修改后的代码示例

public function filterRequest(http:Caller caller, http:Request request, http:FilterContext context) returns boolean {
    // 组装请求信息,假设remoteAdress已正确获取(比如通过request.remoteAddress)
    string requestLog = remoteAdress + " " + request.method + " " + request.rawPath;
    // 将请求信息存入上下文,用唯一键标识
    context.set("requestInfo", requestLog);
    return true;
}

public function filterResponse(http:Response response, http:FilterContext context) returns boolean {
    // 从上下文取出请求信息,处理空值避免运行时错误
    string? requestInfo = context.get("requestInfo");
    string logContent = "";
    if requestInfo is string {
        logContent = requestInfo + " " + response.statusCode.toString();
    } else {
        logContent = "Request info not found - Status: " + response.statusCode.toString();
    }
    // 打印合并后的完整日志
    log:printInfo(logContent);
    return true;
}

关键说明

  • http:FilterContext是同一HTTP请求生命周期内的共享存储,适合传递请求到响应阶段的数据
  • 加入空值判断逻辑,避免上下文未存储数据时出现报错,保证日志打印的安全性
  • 最终日志格式为[远程地址] [请求方法] [请求路径] [响应状态码],清晰关联请求与响应的对应关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:40:17