2017-03-15 90 views
0

我想让Jersey LoggingFeature正常工作。 但我可以找到的所有示例都使用ResourceConfig来显式注册它。Jersey LoggingFeature:在web.xml中

我没有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> 

回答

2

两种方式记录的请求,而不必一个Application子类。

一种方法是在web.xml文件中声明LoggingFilter
<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()); 
    } 
} 
+0

在web.xml中声明它对我不起作用。它工作,虽然如果我继承ResourceConfig并在那里注册LoggingFeature/Filter。 – gaurav5430

+0

''是你的servlet容器声明的一个参数,我想你可能只是将''粘贴到'web.xml'文件的其他地方? – ray

+0

不,我把它放在标签里,同时在web.xml中声明servlet。无论如何,如果我把它放在别的地方,它会给我错误的IDE。 – gaurav5430