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

如何在控制台启用/禁用RequestLogger并打印API请求日志?

解决RequestLogger打印API请求日志不生效的问题

问题根源

你之前的代码用了NullPrintStream.NULL_PRINT_STREAM,这个流会直接丢弃所有输出内容,根本不会生成日志,这是导致没效果的核心原因。另外需要把RequestLogger的输出和你配置好的log4j日志体系关联起来,而不是用空流。

具体解决步骤

1. 自定义PrintStream对接log4j

先创建一个类,把RequestLogger的输出转发给log4j的Logger:

import org.apache.log4j.Logger;
import java.io.OutputStream;
import java.io.PrintStream;

public class Log4jPrintStream extends PrintStream {
    private static final Logger apiLogger = Logger.getLogger("API_REQUEST_LOGGER");
    private final StringBuilder logBuffer = new StringBuilder();

    public Log4jPrintStream(OutputStream out) {
        super(out);
    }

    @Override
    public void write(byte[] buf, int off, int len) {
        String logContent = new String(buf, off, len);
        logBuffer.append(logContent);
        // RequestLogger会按行输出日志,遇到换行就把缓存的内容打出来
        if (logContent.contains(System.lineSeparator())) {
            apiLogger.info(logBuffer.toString().trim());
            logBuffer.setLength(0);
        }
    }
}

2. 重新初始化RequestLogger并绑定

把OnStart里的代码换成下面这样,用自定义的PrintStream初始化:

// 实例化自定义PrintStream,对接log4j
PrintStream logStream = new Log4jPrintStream(System.out);
RequestLogger requestLogger = new RequestLogger(logStream);
// 开启请求和响应日志(根据需求调整,比如只打请求就把setLogResponse设为false)
requestLogger.setLogRequest(true);
requestLogger.setLogResponse(true);
// 绑定到上下文
TestBaseProvider.instance().get().getContext().setProperty("rest.client.requestlogger", requestLogger);

3. 检查log4j配置

确保resources下的log4j.properties里,你定义的API_REQUEST_LOGGER有正确的输出配置,比如:

# 配置API请求专用Logger
log4j.logger.API_REQUEST_LOGGER=INFO, apiFileLog, apiConsoleLog

# 输出到文件
log4j.appender.apiFileLog=org.apache.log4j.RollingFileAppender
log4j.appender.apiFileLog.File=logs/api_requests.log
log4j.appender.apiFileLog.MaxFileSize=10MB
log4j.appender.apiFileLog.MaxBackupIndex=5
log4j.appender.apiFileLog.layout=org.apache.log4j.PatternLayout
log4j.appender.apiFileLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c - %m%n

# 输出到控制台(可选)
log4j.appender.apiConsoleLog=org.apache.log4j.ConsoleAppender
log4j.appender.apiConsoleLog.Target=System.out
log4j.appender.apiConsoleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.apiConsoleLog.layout.ConversionPattern=%d{HH:mm:ss} %-5p %m%n

4. 验证效果

启动服务后发起API请求,去对应的日志文件或者控制台查看,就能看到RequestLogger输出的请求URL、头信息、请求体,以及响应状态、响应体等内容了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:05:21