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; }} |
Rest-assured 写日志到 log4j的更多相关文章
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- java日志框架log4j详细配置及与slf4j联合使用教程
最后更新于2017年02月09日 一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” <d ...
- [转载]java日志框架log4j详细配置及与slf4j联合使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- java日志框架log4j详细配置及与slf4j使用教程
一.log4j基本用法 首先,配置log4j的jar,maven工程配置以下依赖,非maven工程从maven仓库下载jar添加到“build path” 1 2 3 4 5 <dependen ...
- Flume学习应用:Java写日志数据到MongoDB
概述 Windows平台:Java写日志到Flume,Flume最终把日志写到MongoDB. 系统环境 操作系统:win7 64 JDK:1.6.0_43 资源下载 Maven:3.3.3下载.安装 ...
- 日志管理-log4j与slf4j的使用
一.概述 1.log4j: Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Sy ...
- SSM框架中添加写日志功能
前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...
- Java Web项目实现写日志功能
第一步:导入log4j-1.2.16的jar包 第二步:在servlet包里编写写日志的servlet,代码如下: public class InitServlet extends HttpServl ...
- 为何要打印日志?C++在高并发下如何写日志文件(附源码)?
为何要打印日志?让程序裸奔不是一件很快乐的事么? 有些BUG就像薛定谔的猫,具有波粒二象性,当你试图去观察它时它就消失了,当你不去观察它时,它又会出现.当你在测试人员面前赌咒发誓,亲自路演把程序跑一遍 ...
随机推荐
- 年薪30万的Android程序员必须知道的帖子
https://github.com/Trinea/android-open-project
- 接口自动化(三)--读取json文件中的数据
上篇讲到实际的请求数据放置在json文件内,这一部分记述一下python读取json文件的实现. 代码如下(代码做了简化,根据需要调优:可做一些容错处理): 1 import json 2 3 cla ...
- Ubuntu无法sudo提权,报当前用户不在sudoers文件中错误
Ubuntu安装后默认root不能登陆系统,密码也是随机生成,其他用户使用root权限,可以使用sudo提权,前提是该用户在/etc/sudoers配置列表中. 但是有时用户名从/etc/sudoer ...
- IOS AudioServicesPlaySystemSound 后台锁屏播放
AudioServicesPlaySystemSound 想在锁屏后台播放报警提示音. 添加了UIBackgroundModes,audio,官方审核不通过! IOS的闹钟是怎么实现的,锁屏不能播放声 ...
- Redhat 7.2 编译安装PostgreSQL 10
1.环境说明 CentOS7.2 postgresql10.4 2.下载 postgresql的官方地址 https://www.postgresql.org/ftp/source/ 在下载列表中根据 ...
- CImage 往Picture Control贴图 图像显示不正常
在使用CImage 往vc控件 picture Control 上贴图的时候图像显示不太正常如图: 已知原始图片的宽高为640*640 而我上面picture Control 控件宽高小于原始图像 ...
- 关于setConnectTimeout和setReadTimeout的问题
1.问题描述 这几天测试重构后的下载框架,发现在下载过程中如果网络中断或网络较差,个别应用的下载就会阻塞卡住,一直卡在 “正在下载 xx%”. 2.问题排查和定位 思考:网络差不应该报网络异常的错 ...
- Redis 字典的实现
[Redis 字典的实现] 注意 dict 类型使用了两个指针,分别指向两个哈希表. 其中, 0 号哈希表(ht[0])是字典主要使用的哈希表, 而 1 号哈希表(ht[1])则只有在程序对 0 号哈 ...
- SSD
https://blog.csdn.net/WZZ18191171661/article/details/79444217 论文题目:SSD: Single Shot MultiBox Detecto ...
- 切线空间(Tangent Space)
http://download.autodesk.com/global/docs/maya2012/zh-cn/index.html?url=files/Polygons_nodes_Tangent_ ...