2017-03-15 95 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