如何在控制台启用/禁用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
相关产品推荐
相关产品推荐

