【问题标题】:Jersey LoggingFeature : in web.xmlJersey LoggingFeature:在 web.xml 中
【发布时间】:2017-03-15 16:00:37
【问题描述】:

我正在尝试让 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>

【问题讨论】:

    标签: java jersey-2.0


    【解决方案1】:

    在没有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());
        }
    }
    

    【讨论】:

    • 在 web.xml 中声明它对我不起作用。如果我将 ResourceConfig 子类化并在那里注册 LoggingFeature/Filter,它仍然有效。
    • &lt;init-param&gt; 是您的 servlet 容器声明的参数,我猜您可能只是将 &lt;init-param&gt; 粘贴到您的 web.xml 文件中的其他位置?
    • 不,我把它放在 标记中,同时在 web.xml 中声明 servlet。无论如何,如果我把它放在其他地方,它会给我在 IDE 上的错误。
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多