JMeter的核心日志文件jmeter.log默认存储在${JMETER_HOME}/bin目录下(如/usr/local/jmeter/bin/jmeter.log)。该日志记录了JMeter运行时的系统级信息,包括线程启动/结束、请求发送、响应接收、错误堆栈等关键事件,是排查问题的首要入口。
Options→Log Level,可选择DEBUG(详细)、INFO(常规)、ERROR(仅错误)等级别,修改后立即生效,但重启后会恢复默认。${JMETER_HOME}/bin/log4j2.xml文件,修改<Root level="INFO">中的level值为所需级别(如DEBUG),保存后重启JMeter即可永久生效。<Root level="DEBUG">
<AppenderRef ref="jmeter-log"/>
</Root>
适用于需要长期保留详细日志的场景(如分布式测试排查节点问题)。通过Beanshell断言或JSR223断言(推荐,性能更好)输出自定义日志,将业务逻辑(如接口返回的状态码、订单ID、错误消息)与性能测试结果关联,便于快速定位业务失败原因。
示例(Beanshell断言):
import org.apache.log4j.Logger;
String result = prev.getResponseDataAsString(); // 获取响应数据
String code = vars.get("code"); // 从JSON提取器获取code变量
if(!"0".equals(code)){
log.error("业务失败: code=" + code + ", response=" + result); // 记录错误日志
Failure = true; // 标记请求失败
}
执行后,业务相关的错误信息会输出到jmeter.log中,可通过grep "业务失败"快速过滤。
编写Shell脚本解析jmeter.log,提取关键性能指标(如线程数、请求次数、成功/失败率、错误率、吞吐量),生成结构化报告。
示例脚本(logAnalysis.sh):
#!/bin/bash
jmeter_log="/home/test/jmeter.log"
# 提取关键指标
thread_num=$(grep 'Thread started' $jmeter_log | tail -n 1 | awk -F"-" '{print $6}')
start_time=$(grep 'All thread groups have been started' $jmeter_log | awk '{print $1, $2}')
end_time=$(grep 'Shutdown hook ended' $jmeter_log | awk '{print $1, $2}')
success_times=$(grep "place order success" $jmeter_log | wc -l)
failure_times=$(grep "FailureMessage" $jmeter_log | wc -l)
request_times=$((success_times + failure_times))
error_rate=$(echo "scale=2; $failure_times/$request_times*100" | bc)
running_time=$(( $(date -d "$end_time" +%s) - $(date -d "$start_time" +%s) ))
throughput=$(echo "scale=2; $request_times/$running_time" | bc)
# 输出报告
echo "===== JMeter日志分析报告 ====="
echo "线程数: $thread_num"
echo "请求次数: $request_times"
echo "成功次数: $success_times"
echo "失败次数: $failure_times"
echo "错误率: ${error_rate}%"
echo "开始时间: $start_time"
echo "结束时间: $end_time"
echo "总运行时间: ${running_time}s"
echo "吞吐量: ${throughput}/s"
执行脚本后,可快速获取测试的关键性能指标,便于对比不同测试场景的结果。
将JMeter运行时的错误日志单独输出到指定文件(如jmeter_error.log),避免与常规日志混合,提高排查效率。
示例(启动脚本startup.sh):
#!/bin/bash
jmeter_log="/home/test/jmeter.log"
error_log="/home/test/jmeter_error.log"
# 备份并清空旧日志
cp $jmeter_log "${jmeter_log}_back" && rm -f $jmeter_log
# 启动JMeter,将错误日志重定向到单独文件
jmeter -n -t /home/test/test.jmx -l /home/test/result/test.jtl -j $error_log
执行后,所有错误信息(包括log.error输出的业务错误和JMeter自身的错误)会记录到jmeter_error.log中,可通过cat jmeter_error.log或grep "ERROR" jmeter_error.log快速查看。
JMeter生成的jtl结果文件(通过-l参数指定)包含了每个请求的详细响应时间、状态码等信息,可与日志分析结果交叉验证。例如:
jmeter -g result.jtl -o ./report生成HTML报告,查看响应时间的百分位数(如P90、P99)、错误率;