RestAssured打印日志到文件中的方法

本文介绍了一种解决RestAssured框架日志打印问题的方法,通过创建ToLoggerPrintStream类,实现将日志信息自动刷新并记录到指定的日志记录器中。此方案解决了中文乱码问题,并提供了一个简单的使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考https://stackoverflow.com/questions/14476112/how-to-get-rest-assured-log-into-something-printable-in-a-text-file

结合Heriaskucins的回答,兼容中文乱码问题的printstream

package tpf.common;

import org.apache.log4j.Logger;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;

/**
 * A wrapper class which takes a logger as constructor argument and offers a PrintStream whose flush
 * method writes the written content to the supplied logger (debug level).
 * <p>
 * Usage:<br>
 * initializing in @BeforeClass of the unit test:
 * <pre>
 *          ToLoggerPrintStream loggerPrintStream = new ToLoggerPrintStream( myLog );
 *          RestAssured.config = RestAssured.config().logConfig(
 *                                 new LogConfig( loggerPrintStream.getPrintStream(), true ) );
 * </pre>
 * will redirect all log outputs of a ValidatableResponse to the supplied logger:
 * <pre>
 *             resp.then().log().all( true );
 * </pre>
 *
 * @version 1.0 (28.10.2015)
 * @author  Heri Bender
 */
public class ToLoggerPrintStream {
    /**
     * Logger for this class
     */
    private Logger myLog;
    private PrintStream myPrintStream;

    /**
     * @return printStream
     */
//    public PrintStream getPrintStream() {
//        if (myPrintStream == null) {
//            OutputStream output = new OutputStream() {
//                private StringBuilder myStringBuilder = new StringBuilder();
//
//                @Override
//                public void write(int b) throws IOException {
//                    this.myStringBuilder.append((char) b);
//                }
//
//                /**
//                 * @see java.io.OutputStream#flush()
//                 */
//                @Override
//                public void flush() {
//                    myLog.debug(this.myStringBuilder.toString());
//                    myStringBuilder = new StringBuilder();
//                }
//            };
//
//            myPrintStream = new PrintStream(output, true);  // true: autoflush must be set!
//        }
//       return myPrintStream;
//}
    public PrintStream getPrintStream() {
        if (myPrintStream == null) {
            OutputStream output = new OutputStream() {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                @Override
                public void write(int b) throws IOException {
                    baos.write(b);
                }

                @Override
                public void flush() {
                    myLog.debug(this.baos.toString());
                    baos = new ByteArrayOutputStream();
                }
            };
            myPrintStream = new PrintStream(output, true);  // true: autoflush must be set!
        }
        return myPrintStream;
    }

    /**
     * Constructor
     *
     * @param aLogger
     */
    public ToLoggerPrintStream(Logger aLogger) {
        super();
        myLog = aLogger;
    }
}

 

转载于:https://www.cnblogs.com/zipon/p/7582832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值