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