Rest-assured 写日志到 log4j

背景:

采用Rest-assured,日志采用log4j,发现Rest-assured本身只支持打印日志到控制台,但期望打印到文件中以便排查问题

请求打印的语句只能输出到控制台

given().log().all()

(Rest-assured的官方文档:https://github.com/rest-assured/rest-assured

 解决方法:

1.翻阅资料,可以通过RestAssured.config来改变日志方面的配置,因此尝试从这里入手

RestAssured.config = RestAssured.config().logConfig(new LogConfig());

2.发现一种解决方法,PrintStream支持 字符串路径/File对象/outputstream,可以通过新建file来可以将日志输出到file中,但这种不能append,只能保存最新的一次记录,而且没有log4j格式

PrintStream ps = new PrintStream(new File("test.txt")); RestAssured.config = config().logConfig(new LogConfig(ps));

3.继续google,发现了通过重写方法来解决该问题(http://stackoverflow.com/questions/14476112/how-to-get-rest-assured-log-into-something-printable-in-a-text-file),需要新建一个类来将logger转为outputstream

ToLoggerPrintStream loggerPrintStream = new ToLoggerPrintStream(logger); RestAssured.config = RestAssured.config().logConfig(new LogConfig(loggerPrintStream.getPrintStream(), true));

ToLoggerPrintStream类源码:

折叠原码

import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException;   import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.Logger;   /**  * 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:  * <p>  * <pre>  * ToLoggerPrintStream loggerPrintStream = new ToLoggerPrintStream(myLog);  * RestAssured.config = RestAssured.config().logConfig(new LogConfig(loggerPrintStream.getPrintStream(), true));  * </pre>  * <p>  * will redirect all log outputs of a ValidatableResponse to the supplied  * logger:  * <p>  * <pre>  * resp.then().log().all(true);  * </pre>  *  * @author Heri Bender  * @version 1.0 (28.10.2015)  */ public class ToLoggerPrintStream {     /**      * Logger for this class      */     private Logger myLog;     private PrintStream myPrintStream;       /**      * @return printStream      * @throws UnsupportedEncodingException      */     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);                   }                   /**                  * @see java.io.OutputStream#flush()                  */                 @Override                 public void flush() {                       String log = this.baos.toString().trim();                       if (!StringUtils.isBlank(log)) {                         myLog.info(log);                         baos = new ByteArrayOutputStream();                     }                 }             };             // true: autoflush             // must be set!             myPrintStream = new PrintStream(output, true);           }         return myPrintStream;     }       /**      * Constructor      *      * @param logger      */     public ToLoggerPrintStream(Logger logger) {         super();         myLog = logger;     } }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

学习SpringMVC——你们要的REST风格的CRUD来了

  来来来,让一下,客官,您要的REST清蒸CRUD来了,火候刚刚好,不油不腻,请慢用~~~   如果说前面是准备调料,洗菜,切菜,摆盘,那么今天就来完整的上道...

352100
来自专栏个人分享

Spark代码调优(一)

import org.apache.spark.sql.{DataFrame, Row, SQLContext}

25710
来自专栏小筱月

SSM 使用 mybatis 分页插件 pagehepler 实现分页

前几天在这里分享了手写 sql 分页查询实现分页,现在来看看使用 mybatis 分页插件 pagehepler 来实现分页

43920
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-25(03)图形用户界面编程GUI

B:登录注册 package cn.itcast.util;(1) import java.awt.Dimension; import java.awt.Ima...

33940
来自专栏Java3y

从零开始写项目第一篇【搭建环境】

使用Maven搭建SSM环境 SSM需要的基础jar包有哪些??整理一下: c3p0数据连接池 springMVC的JSON springAOP springC...

552100
来自专栏Spring相关

SocketIo+SpringMvc实现文件的上传下载

socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示:

11020
来自专栏aCloudDeveloper

python网络编程初级

网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、Java等)所实现的符合自身特性的语法都大同小...

25350
来自专栏小灰灰

RabbitMQ基础教程之Spring&JavaConfig使用篇

25470
来自专栏一个会写诗的程序员的博客

Kotlin 全栈开发之 前端 JavaScrip

Kotlin 全栈开发之 前端 JavaScript: Getting Started with Kotlin and JavaScript with Gra...

26130
来自专栏后台开发+音视频+ffmpeg

dpvs源码分析

dpvs是爱奇艺开源的,它是一款基于dpdk的高性能4层负载均衡器。源自于LVS和改版后的alibaba/LVS. dpvs即dpdk-lvs. 等多关于dpv...

1.3K20

扫码关注云+社区

领取腾讯云代金券