Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTAPI应用程序中ContainerRequestFilter的java实现_Java_Resteasy - Fatal编程技术网

RESTAPI应用程序中ContainerRequestFilter的java实现

RESTAPI应用程序中ContainerRequestFilter的java实现,java,resteasy,Java,Resteasy,我已经实现了“ContainerRequestFilter”来记录日志文件中的每个请求,它与Rest API通信,现在我的问题是,要同时处理多个请求,这样就不会发生请求丢失,并且系统不会因为额外的日志开销而停机,所以我们是否需要做一些特定的事情,或者它将由过滤器内部处理 我已经提到了实现类,如下所示 @Provider public class CustomLoggingFilter implements ContainerRequestFilter, ContainerResponseFilt

我已经实现了“ContainerRequestFilter”来记录日志文件中的每个请求,它与Rest API通信,现在我的问题是,要同时处理多个请求,这样就不会发生请求丢失,并且系统不会因为额外的日志开销而停机,所以我们是否需要做一些特定的事情,或者它将由过滤器内部处理

我已经提到了实现类,如下所示

@Provider
public class CustomLoggingFilter implements ContainerRequestFilter, ContainerResponseFilter{

    final static Logger log = Logger.getLogger(CustomLoggingFilter.class);

    @Context
    private ResourceInfo resourceInfo;

    @Override
    public void filter(ContainerRequestContext requestContext)
            throws IOException {
        MDC.put("start-time", String.valueOf(System.currentTimeMillis()));

        log.info("Entering in Resource : "+requestContext.getUriInfo().getPath());
        log.info("Method Name : "+ resourceInfo.getResourceMethod().getName());
        log.info("Class : "+ resourceInfo.getResourceClass().getCanonicalName());

        readEntityStream(requestContext);
    }

    private void readEntityStream(ContainerRequestContext requestContext){
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        final InputStream inputStream = requestContext.getEntityStream();
        final StringBuilder builder = new StringBuilder();

        int read=0;
        final byte[] data = new byte[4096];
        try {
            while ((read = inputStream.read(data)) != -1) {
                outStream.write(data, 0, read);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        byte[] requestEntity = outStream.toByteArray();
        if (requestEntity.length == 0) {
            builder.append("");
        } else {
            builder.append(new String(requestEntity));
        }
        requestContext.setEntityStream(new ByteArrayInputStream(requestEntity) );
        if(null != builder.toString() && builder.toString().trim().length() > 0) {
            log.info("Request Parameter: {}"+builder.toString());
        }
    }

    @Override
    public void filter(ContainerRequestContext requestContext,
            ContainerResponseContext responseContext) throws IOException {
        String stTime = MDC.get("start-time");
        if(null == stTime || stTime.length() == 0) {
            return;
        }
        long startTime = Long.parseLong(stTime);
        long executionTime = System.currentTimeMillis() - startTime;
        log.info("Total request execution time :"+executionTime+" milliseconds");
    }
}