当前位置: 首页 > 知识库问答 >
问题:

CXF日志响应时间

师赤岩
2023-03-14

我使用CXF和JAX-RS构建RESTFul API,为我的web应用程序提供数据。我想知道是否有可能记录请求X到达我的API、被处理然后作为响应返回所花费的时间。

我已经将自己的CXF记录器定义为JAX-RS特性,因为<code>

11-21 10:37:01,052 INFO  [-8080-exec-7] +- CXF Request  --  ID : [24], Address : [http://my.api.com], HTTP Method : [GET] @org.apache.cxf.interceptor.LoggingOutInterceptor
11-21 10:37:01,089 INFO  [-8080-exec-7] +- CXF Response  --  ID : [24], Response Code : [200]        @org.apache.cxf.interceptor.LoggingInInterceptor

有没有一种方法可以从客户端跟踪时间并记录下来?

共有1个答案

吕天逸
2023-03-14

这个主题是旧的,但是分享了我在客户端采用的方法。

>

  • 我们与服务器进行了基于SOAP的交换,因此我们的类扩展了AbstractSoapInterceptor

    在handleMessage()中,我们找到消息的方向(入站或出站),并计算处理所需的时间。

       public void handleMessage(SoapMessage message) throws Fault {
            try {
                boolean isOutbound = MessageUtils.isOutbound(message);
                if (isOutbound) {
                    // outgoing 
                    long requestSentTime = System.currentTimeMillis();
    
                LOGGER.trace("Sending request to server at {} milliseconds", requestSentTime);
                message.getExchange().put(ApplicationConstants.CXF_REQUEST_TIME, requestSentTime);
            } else {
                // incoming
                long requestSentTime = (long) message.getExchange().get(ApplicationConstants.CXF_REQUEST_TIME);
                long requestReceiveTime = System.currentTimeMillis();
    
                LOGGER.trace("Receiving request from server at {} milliseconds", requestReceiveTime);
                long executionTime = requestReceiveTime - requestSentTime;
                LOGGER.info("Server execution time in milliseconds was {}", executionTime);
            }
        } catch (Exception e) {
            LOGGER.error("handleMessage() threw exception {} ", e);
            // Log and do nothing
        }
    
    }
    
    <bean id="processingTimeInterceptor" class="ProcessingTimeInterceptor" />    
    <jaxws:client ...">
            <jaxws:inInterceptors>
                <ref bean="processingTimeInterceptor" />            
            </jaxws:inInterceptors>
            <jaxws:outInterceptors>
                <ref bean="processingTimeInterceptor" />            
            </jaxws:outInterceptors>
        </jaxws:client>
    

  •  类似资料:
    • 我已经定义了: 在filter方法中,我记录了响应,但我还想添加执行请求的。我知道我可以在请求之前访问这些数据(使用),但有没有办法将这些数据添加到我的过滤器?

    • 标题应该是不言自明的。 出于调试目的,我希望express打印每个服务请求的响应代码和正文。打印响应代码很容易,但打印响应体更为复杂,因为响应体似乎不容易作为属性使用。 以下情况不起作用: 当然,我可以很容易地在发出请求的客户端打印响应,但我也更喜欢在服务器端打印。 PS:如果有帮助的话,我所有的响应都是json,但希望有一个解决方案可以处理一般的响应。

    • 虽然我已经与他们互动多年,但我对WSDL设计非常陌生。我有一个 WSDL,我正在尝试与 Camel 一起使用 我试图实现的是对SOAP客户端的自定义响应字符串,并将SOAP请求转换为JSON,并将其推送到websocketsendpoint。 我的WSDL模式在代码生成时生成响应类,但是响应似乎从来没有在调试器中被调用过。 此外,如果我删除Camel中的json转换器,整个soap请求将返回给SO

    • 我试图在JBoss Fuse中为CXF-WS创建一个非常简单的服务,但我在响应消息上遇到了问题。请求被正确调用,spring-camel路由运行良好,但是响应总是包含一个空白的'SOAP body'标记。以下是我对该服务的操作: 使用wsdl2java.ext创建java对象模型 使用camel公开了CXF WS 调用camel路由中的处理器组件来创建响应消息。的消息类型与我仅使用生成的对象工厂创

    • 我们期望开发的Web应用程序能够把整个程序运行过程中出现的各种事件一一记录下来,Go语言中提供了一个简易的log包,我们使用该包可以方便的实现日志记录的功能,这些日志都是基于fmt包的打印再结合panic之类的函数来进行一般的打印、抛出错误处理。Go目前标准包只是包含了简单的功能,如果我们想把我们的应用日志保存到文件,然后又能够结合日志实现很多复杂的功能(编写过Java或者C++的读者应该都使用过

    • 我已经搜索了堆栈溢出,但没有找到任何接近我需要的东西,所以如果它是重复的,告诉我,我会删除这篇文章。 我有一个web应用程序,它是一个单一的REST服务,只执行一个Thread.Sleep(10000)。如果方法只Hibernate10秒,那么我的所有请求都应该有10-11秒的平均响应时间,对吗? 要在JMeter上测试它,通常我使用200个线程和5秒的斜坡。当测试开始时,我的平均响应时间保持在1