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

Gatling日志优化:排除大响应体避免内存溢出与日志冗余

解决Gatling大响应体日志引发的内存溢出问题

方案1:通过Logback过滤特定请求的TRACE日志

Gatling基于Logback实现日志功能,你可以给io.gatling.http.engine.response日志器配置过滤器,直接跳过匹配JS资源特征的日志:

  1. 修改项目中的logback.xml或logback-test.xml文件,添加自定义过滤规则:
<configuration>
  <!-- 保留原有日志appender配置 -->
  <logger name="io.gatling.http.engine.response" level="TRACE">
    <appender-ref ref="YOUR_APPENDER_NAME"/>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
      <evaluator>
        <!-- 替换成你的JS资源路径特征,比如匹配.js后缀或特定静态资源路径 -->
        <expression>message.contains(".js") || message.contains("/static/js/")</expression>
      </evaluator>
      <onMismatch>ACCEPT</onMismatch>
      <onMatch>DENY</onMatch>
    </filter>
  </logger>
</configuration>

方案2:限制响应体日志的输出长度

通过自定义Logback格式化转换器,截断过长的响应体内容,避免大文本占用内存:

  1. 实现一个Java自定义转换器类:
import ch.qos.logback.core.pattern.CompositeConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class TruncateBodyConverter extends CompositeConverter<ILoggingEvent> {
    private static final int DEFAULT_MAX_LENGTH = 100;
    private int maxLength = DEFAULT_MAX_LENGTH;

    @Override
    public void start() {
        String maxLengthStr = getFirstOption();
        if (maxLengthStr != null) {
            try {
                maxLength = Integer.parseInt(maxLengthStr);
            } catch (NumberFormatException e) {
                addError("无效的最大长度值: " + maxLengthStr, e);
            }
        }
        super.start();
    }

    @Override
    protected String transform(ILoggingEvent event, String body) {
        if (body == null || body.length() <= maxLength) {
            return body;
        }
        return body.substring(0, maxLength) + "... [已截断]";
    }
}
  1. 在logback.xml中注册并使用该转换器:
<configuration>
  <!-- 注册自定义转换器 -->
  <conversionRule conversionWord="truncateBody" converterClass="com.yourpackage.TruncateBodyConverter"/>
  
  <!-- 修改日志格式,将响应体输出替换为截断后的内容 -->
  <appender name="YOUR_APPENDER_NAME" class="ch.qos.logback.core.FileAppender">
    <file>gatling.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %truncateBody{100}%n</pattern>
    </encoder>
  </appender>

  <logger name="io.gatling.http.engine.response" level="TRACE" additivity="false">
    <appender-ref ref="YOUR_APPENDER_NAME"/>
  </logger>
</configuration>
  • %truncateBody{100}表示只保留响应体前100字节,超出部分会添加截断标记。

方案3:结合Gatling请求标记过滤

在Gatling脚本中给需要追踪的请求打标记,再通过Logback只记录带标记的请求日志:

  1. 脚本中给关键请求添加自定义标记:
http("核心业务接口")
  .get("/api/核心接口路径")
  .tag("need-trace")
  1. 修改Logback配置,仅保留包含该标记的日志:
<logger name="io.gatling.http.engine.response" level="TRACE">
  <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
    <evaluator>
      <expression>message.contains("tag=need-trace")</expression>
    </evaluator>
    <onMismatch>DENY</onMismatch>
    <onMatch>ACCEPT</onMatch>
  </filter>
</logger>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 13:42:48