您如何从 CXF Rest Client 获取日志记录?

How do you get logging from the CXF Rest Client?

这花了我很长时间才弄清楚。我问这个问题是为了替别人回答:

您如何从 CXF Rest Client 获取有用的日志记录信息? EG:url、参数、负载、响应等

注意:这个问题已经存在,但它询问的是 CXF 和 Resteasy。我只想要 CXF 的答案:Logging in CXF and RestEasy clients

以下是使用 CXF 的方法:

import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxrs.client.ClientConfiguration;
import org.apache.cxf.jaxrs.client.WebClient;
import org.json.JSONException;
import org.json.JSONObject;
...
    WebClient client = WebClient.create(endPoint, providers).accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON);
    ClientConfiguration config = WebClient.getConfig(client);
    config.getInInterceptors().add(new LoggingInInterceptor());
    config.getOutInterceptors().add(new LoggingOutInterceptor());

使用 CXF 3 中的 JAX-RS 2.0 客户端。1.x 我在让 LoggingInInterceptor 和 LoggingOutInterceptor 工作时遇到了一些问题。我更改为使用 http://cxf.apache.org/docs/message-logging.html 中描述的 LoggingFeature,它首先尝试工作:

Client client = ClientBuilder.newBuilder().register(LoggingFeature.class).build()

您可以使用适当的 create() 方法将 LoggingFeature 的实例直接传递给您的客户端。

Response response = WebClient
                .create(baseAddress,
                        Arrays.<Object>asList(Arrays
                                .<Object>asList(new JacksonJsonProvider())),
                        Arrays.<Feature>asList(new LoggingFeature()), null)
                .type(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON).path(path).post(request);