Jersey LoggingFeature:在web.xml中

时间:2017-03-15 16:00:37

标签: java jersey-2.0

我想让Jersey LoggingFeature工作。 但是我能找到的所有例子都使用ResourceConfig来明确地注册它。

我没有ResourceConfig或Application子类,如何从web.xml启用LoggingFeature?

编辑:

我试过了:

<servlet>
    <servlet-name>myApp</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

    ...
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.logging.LoggingFeature</param-value>
    </init-param>

  </servlet>

以及:

<servlet>
    <servlet-name>myApp</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        ...
    </init-param>

    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.logging.LoggingFilter</param-value>
    </init-param>

  </servlet>

1 个答案:

答案 0 :(得分:2)

在没有Application子类的情况下记录请求的两种方法。

一种方法是在LoggingFilter文件中声明web.xml<init-param><param-name>jersey.config.server.provider.classnames</param-name><param-value>org.glassfish.jersey.filter.LoggingFilter</param-value</init-param>
请注意,Jersey不推荐使用此记录器,将来的版本将删除它。

另一种方法是定义您自己的ContainerRequestFilter / ContainerResponseFilter来进行记录。确保此类位于Jersey中将扫描资源和提供程序类的包中。

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;

@Provider
public class MyLoggingFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        // replace by your own logging code
        System.out.printf("%s %s\n", requestContext.getMethod(), requestContext.getUriInfo().getPath());
    }
}