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
相关产品推荐
相关产品推荐

