Logging 日志记录在Junit测试中将日志重新发布到Log4J

Logging 日志记录在Junit测试中将日志重新发布到Log4J,logging,log4j,rest-assured,Logging,Log4j,Rest Assured,我试图在StackExchange和web上搜索,但找不到一个明确的例子来帮助我解决这个问题。我们正在使用rest-assured IO测试一些rest服务。我们需要将请求和响应日志重定向到Log4J日志。我们有以下代码试图测试日志重定向: public class RestTest { private static RequestSpecification spec; private static Logger logger = LogManager.getLogger(RestTes

我试图在StackExchange和web上搜索,但找不到一个明确的例子来帮助我解决这个问题。我们正在使用rest-assured IO测试一些rest服务。我们需要将请求和响应日志重定向到Log4J日志。我们有以下代码试图测试日志重定向:

 public class RestTest {

 private static RequestSpecification spec;
 private static Logger logger = LogManager.getLogger(RestTest.class);
 @Rule
 public TestWatcher watcher = new Log4JWatcher();

 @BeforeClass
 public static void initSpec(){
 PrintStream logStream = IoBuilder.forLogger(logger).buildPrintStream();
 RestAssuredConfig restAssuredConfig = new RestAssuredConfig();
 LogConfig logConfig = restAssuredConfig.getLogConfig(); 
 logConfig
 .defaultStream(logStream)
 .enablePrettyPrinting(true);

  spec = new RequestSpecBuilder()
         .setContentType(ContentType.JSON)
            .setBaseUri("http://jsonplaceholder.typicode.com/")
            .addFilter(new ResponseLoggingFilter())
            .addFilter(new RequestLoggingFilter())
            .setConfig(restAssuredConfig)
            .build();

}

@Test
public void useSpec(){

    given()
            .spec(spec)
            .param("limit", 20)
            .when()
            .get("posts")
            .then()
            .statusCode(200);
}
}
我们将以下日志输出到log4j文件:

09:47:17.264 [main] INFO  test.util.Log4JWatcher - useSpec(test.ExtentReportSandbox.RestTest)
09:49:45.485 [main] INFO  test.util.Log4JWatcher - useSpec(test.ExtentReportSandbox.RestTest)
在system.out上,我们可以看到请求和响应的可靠输出。该输出不会重定向到log4j文件。如何将控制台输出重定向到log4j文件

谢谢你的帮助

****更新****** 通过更改以下内容解决了此问题:

        new RequestLoggingFilter();
    new ResponseLoggingFilter();
    spec = new RequestSpecBuilder()
            .setContentType(ContentType.JSON)
            .setBaseUri("http://jsonplaceholder.typicode.com/")
            .addFilter(ResponseLoggingFilter.logResponseTo(logStream))
            .addFilter(RequestLoggingFilter.logRequestTo(logStream))
            .setConfig(restAssuredConfig)
            .build();
        new RequestLoggingFilter();
    new ResponseLoggingFilter();
    spec = new RequestSpecBuilder()
            .setContentType(ContentType.JSON)
            .setBaseUri("http://jsonplaceholder.typicode.com/")
            .addFilter(ResponseLoggingFilter.logResponseTo(logStream))
            .addFilter(RequestLoggingFilter.logRequestTo(logStream))
            .setConfig(restAssuredConfig)
            .build();
现在,它像我们预期的那样将输出发送到Log4j文件。关键是在过滤器中添加“logResponseTo”和“logRequestTo”。 尽管它现在正在发挥作用,但我们不确定这是实现我们所需的最佳方式还是有更好的方式。
将保留该问题一段时间供评论

通过更改以下内容解决了该问题:

        new RequestLoggingFilter();
    new ResponseLoggingFilter();
    spec = new RequestSpecBuilder()
            .setContentType(ContentType.JSON)
            .setBaseUri("http://jsonplaceholder.typicode.com/")
            .addFilter(ResponseLoggingFilter.logResponseTo(logStream))
            .addFilter(RequestLoggingFilter.logRequestTo(logStream))
            .setConfig(restAssuredConfig)
            .build();
        new RequestLoggingFilter();
    new ResponseLoggingFilter();
    spec = new RequestSpecBuilder()
            .setContentType(ContentType.JSON)
            .setBaseUri("http://jsonplaceholder.typicode.com/")
            .addFilter(ResponseLoggingFilter.logResponseTo(logStream))
            .addFilter(RequestLoggingFilter.logRequestTo(logStream))
            .setConfig(restAssuredConfig)
            .build();
现在,它像我们预期的那样将输出发送到Log4j文件。关键是在过滤器中添加“logResponseTo”和“logRequestTo”

请从标题中删除“已解决”,并将您的解决方案移至其自己的答案。非常感谢。