Jersey JAX-RS:将日志记录扩展到资源类调度
我正在使用Jersey JAX-RS进行REST服务。 我在SE部署中使用GrizzlyHttp在我的程序中运行它 我还注册了一个记录器,它打印出HTTP请求和响应 我缺少的是在HTTP服务器和资源类之间进行日志记录 如果没有路径匹配,或者路径匹配但参数不匹配,或者类似情况,我希望查看日志条目。今天,我需要检查注释并将其与记录的HTTP参数进行比较。在周围多记录一些日志会有帮助的Jersey JAX-RS:将日志记录扩展到资源类调度,jersey,jax-rs,Jersey,Jax Rs,我正在使用Jersey JAX-RS进行REST服务。 我在SE部署中使用GrizzlyHttp在我的程序中运行它 我还注册了一个记录器,它打印出HTTP请求和响应 我缺少的是在HTTP服务器和资源类之间进行日志记录 如果没有路径匹配,或者路径匹配但参数不匹配,或者类似情况,我希望查看日志条目。今天,我需要检查注释并将其与记录的HTTP参数进行比较。在周围多记录一些日志会有帮助的 这可能吗?您可以通过使用预匹配过滤器来实现 预匹配过滤器是在JAR-RS运行时尝试将请求与资源匹配之前调用的过滤器。
这可能吗?您可以通过使用预匹配过滤器来实现 预匹配过滤器是在JAR-RS运行时尝试将请求与资源匹配之前调用的过滤器。这种类型的筛选器允许您记录请求的URI,即使它可能与您的任何资源都不匹配。您可以使用
@PreMatching
注释对过滤器进行注释,这就是在资源匹配阶段之前调用过滤器所需做的全部工作
注意::如果希望在提供者扫描阶段JAX-RS运行时可以发现过滤器,则需要使用@provider
注释对其进行注释。或者,您可以在应用程序设置中手动注册它(正如我所做的,这就是为什么在下面的示例中,我没有用@Provider
注释过滤器)
下面是一个非常简单的预匹配过滤器示例
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import java.io.IOException;
@PreMatching
public class PreMatchingFilterExample implements ContainerRequestFilter {
private final static Logger LOG = LogManager.getLogger(PreMatchingFilterExample.class);
@Context
UriInfo uriInfo;
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
LOG.info("Resource not found: " + uriInfo.getAbsolutePath());
LOG.info("Path params: " + uriInfo.getPathParameters());
LOG.info("Query params: " + uriInfo.getQueryParameters());
}
}