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

如何在K6自定义报告中捕获阈值失败日志及控制台输出?

K6运行时日志与自定义报告整合问题解决办法

问题描述

尝试编写K6自定义报告以捕获运行时所有消息,但使用handleSummary生成的txt文件中看不到阈值失败日志(如下示例)和console.log()输出:

ERRO[0088] thresholds on metrics 'PUT_api_buyer_sa_buyer_buyerID_contact_contact, PUT_api_buyer_sa_buyer_buyerID_contact_contactID' have been crossed

使用的自定义报告代码:

export function handleSummary(summaryData) {
  const data = summaryData;
  return {
    stdout: textSummary(data, { indent: " ", enableColors: true }) ,
    [`report_summary_${__ENV.TIMESTAMP}.txt`]: textSummary(data, {
      indent: " ",
      enableColors: false,
    }),
  };
}

核心需求:将K6运行时控制台显示的所有日志(包括阈值错误、console输出)重定向到txt文件。

解决方案

方法1:命令行重定向(最简单直接)

K6的运行时日志默认输出到stdout/stderr,直接通过shell命令将所有输出合并到文件:

# Linux/macOS
k6 run your-script.js > report_summary_$(date +%Y%m%d%H%M%S).txt 2>&1

# Windows cmd
k6 run your-script.js > report_summary_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt 2>&1
  • > 负责将标准输出(stdout,比如console.log内容)写入文件
  • 2>&1 将错误输出(stderr,比如阈值失败日志)也重定向到同一文件

方法2:代码层面捕获console输出

如果需要在脚本内灵活控制日志存储,可以手动覆盖console方法,将输出存入全局变量后追加到报告:

  1. 在脚本开头添加日志捕获逻辑:
// 全局数组存储运行时console输出
const runtimeLogs = [];

// 覆盖console.log,同时保留控制台输出
const originalLog = console.log;
console.log = (...args) => {
  runtimeLogs.push(`[INFO] ${args.join(' ')}`);
  originalLog(...args);
};

// 覆盖console.error,同时保留控制台输出
const originalError = console.error;
console.error = (...args) => {
  runtimeLogs.push(`[ERROR] ${args.join(' ')}`);
  originalError(...args);
};
  1. 修改handleSummary合并汇总数据与日志:
import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js';

export function handleSummary(summaryData) {
  const summaryContent = textSummary(summaryData, { indent: " ", enableColors: false });
  // 合并汇总报告和运行时日志
  const fullReport = `${summaryContent}\n\n=== 运行时控制台日志 ===\n${runtimeLogs.join('\n')}`;

  return {
    stdout: textSummary(summaryData, { indent: " ", enableColors: true }),
    [`report_summary_${__ENV.TIMESTAMP}.txt`]: fullReport,
  };
}

注意:这种方法仅能捕获console相关输出,无法获取K6内核直接输出的阈值错误日志(如示例中的ERRO[0088]),这类日志仍需结合命令行重定向捕获。

方法3:使用K6内置日志参数

通过K6的--log-output和--summary-output参数分别控制日志与报告的输出位置,再按需合并:

# 分别生成日志文件和汇总报告文件
k6 run your-script.js --log-output=file=runtime_logs.txt --summary-output=summary_report.txt

# 合并为单个文件(Linux/macOS)
cat summary_report.txt runtime_logs.txt > full_report_$(date +%Y%m%d%H%M%S).txt && rm runtime_logs.txt summary_report.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:35:04