如何让tomcat上的Jersey 2.5.1记录请求/响应,包括实体(请求/响应主体)

如何让tomcat上的Jersey 2.5.1记录请求/响应,包括实体(请求/响应主体),tomcat,jersey-2.0,Tomcat,Jersey 2.0,我在tomcat上部署了Jersey 2.5.1应用程序。我在我的web.xml中添加了以下配置: <init-param> <param-name>jersey.config.server.provider.classnames</param-name> <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value> </init-param>

我在tomcat上部署了Jersey 2.5.1应用程序。我在我的web.xml中添加了以下配置:

<init-param>
  <param-name>jersey.config.server.provider.classnames</param-name>
  <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
</init-param>
  <servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.my.package.web.resources;org.codehaus.jackson.jaxrs</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.tracing</param-name>
        <param-value>ALL</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey-servlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
  • 您不能在
    web.xml
    中配置它
  • 您正在混合Jersey的两个版本(您的
    web.xml
    中的init参数来自Jersey 1-
    com.sun.Jersey
    包前缀)
  • 查看一下您可以在那里找到如何注册
    LoggingFilter
    ,以确保实体也被记录

  • 您可以按照Lokesh Gupta的方法创建
    CustomLoggingFilter.java

    不过,我最终注册的过滤器略有不同:

    public class MyApplication extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> classes = new HashSet<>();
            classes.addAll(super.getClasses());
            classes.add(CustomLoggingFilter.class);
            return classes;
        }
    }
    

    请看下面我的评论:提供的链接3。包含未编译的代码,其中有一些令人困惑的错误。我觉得它不是很有用。遵循3,我仍然无法获得实体的日志记录。还有什么需要帮忙的吗?嗨,我也差不多。但我无法以Json格式打印它。有什么见解吗?谢谢
    Jan 28, 2014 2:36:38 PM org.glassfish.jersey.filter.LoggingFilter log
    INFO: 5 * Server has received a request on thread http-bio-8080-exec-10
    5 > GET http://localhost:8080/sample/api/foo
    5 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    5 > accept-encoding: gzip,deflate,sdch
    5 > accept-language: en-US,en;q=0.8
    5 > cache-control: max-age=0
    5 > connection: keep-alive
    5 > cookie: JSESSIONID=1F5CCACA7DF2EABA9475C270A95C91B2
    5 > host: localhost:8080
    5 > user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36
    
    Jan 28, 2014 2:36:38 PM Jan 28, 2014 2:36:38 PM org.glassfish.jersey.filter.LoggingFilter log
    INFO: 5 * Server responded with a response on thread http-bio-8080-exec-10
    5 < 200
    5 < Content-Type: application/json
    
        public MyApplication() {
            // Register resources and providers using package-scanning.
            packages("my.package");
    
            // Register my custom provider - not needed if it's in my.package.
            register(SecurityRequestFilter.class);
            // Register an instance of LoggingFilter.
            register(new LoggingFilter(LOGGER, true));
    
            // Enable Tracing support.
            property(ServerProperties.TRACING, "ALL");
        }
    }
    
    public class MyApplication extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> classes = new HashSet<>();
            classes.addAll(super.getClasses());
            classes.add(CustomLoggingFilter.class);
            return classes;
        }
    }
    
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>org.something.MyApplication</param-value>
    </init-param>