当前位置: 首页 > 知识库问答 >
问题:

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

羊时铭
2023-03-14

我在雄猫上部署了一个泽西岛 2.5.1 应用程序。我在我的网络中添加了以下配置.xml:

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

它打印请求和响应头。但是,它没有在响应中打印请求/响应实体/主体。

我试着和不同的情妇玩,但没有运气,比如:

INFO: 1 * Server has received a request on thread http-bio-8080-exec-3
1 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
1 > accept-encoding: gzip,deflate,sdch
1 > accept-language: en-US,en;q=0.8
1 > cache-control: no-cache
1 > connection: keep-alive
1 > cookie: JSESSIONID=1F5CCACA7DF2EABA9475C270A95C91B2
1 > host: localhost:8080
1 > pragma: no-cache
1 > 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 24, 2014 1:01:31 AM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Server responded with a response on thread http-bio-8080-exec-3
1 < 200
1 < Content-Type: application/json

感谢您的回答。看起来我在上面粘贴了错误的配置。这是我在我的网络上有什么.xml:

  <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>

它记录标题。但它不记录实体。这是我在日志中看到的:

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

我的Jersey应用程序部署在Tomcat 7_50服务器上。

如果我在web.xml中使用init-param配置了跟踪和日志过滤器。我还需要使用资源配置注册它吗?

公共类MyApplication扩展ResourceConfig,如下所示:

    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");
    }
}

共有2个答案

端木昱
2023-03-14

您可以按照Lokesh Gupta的说明创建一个< code > 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;
    }
}

在您的网络上注册您的“我的应用程序.java.xml

<init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>org.something.MyApplication</param-value>
</init-param>
桑思远
2023-03-14
  1. 您无法在 Web .xml中对其进行配置。
  2. 您正在混合泽西岛的 2 个版本(您的网络中的初始化参数.xml来自泽西岛 1 - com.sun.jersey 软件包前缀)
  3. 看看在泽西岛2中注册资源和提供程序,你可以在那里找到如何注册日志记录过滤器以确保实体也被记录。
 类似资料:
  • 我在改型API中找不到记录完整请求/响应体的相关方法。我希望在探查器中得到一些帮助(但它只提供关于响应的元数据)。我尝试在构建器中设置日志级别,但这也没有帮助: 编辑:此代码正在工作。我不知道为什么它在早些时候不起作用。可能是因为我用的是旧版本的改装。

  • 我有一个spring应用程序,它可以与Mobile交换JSON。Spring控制器如下所示: 我想知道,记录http请求正文和响应正文的最佳方式是什么?目前,我有一个定制的json消息转换器,它在从json中创建bean之前记录一个请求正文。我使用CustomTraceInterceptor记录响应正文。不幸的是,CustomTraceInterceptor不允许记录请求正文。 任何更好的解决方案

  • 最后是网关服务的application.yml文件...

  • 问题内容: 这是In go中的后续问题,如何检查写入http.ResponseWriter的http响应因为那里的解决方案需要伪造一个请求,所以对于单元测试非常有效,但不适用于实时服务器。 我想将我的Web服务响应于从用户收到的请求而返回的HTTP响应转储到日志文件(或控制台)中。输出应该告诉我标题是什么和JSON有效负载。 如何做到这一点? 如果有一个使用http.ResponseWriter作

  • 应用程序应异步(在单独的线程中)记录以下信息,而不会影响客户端。 请求HTTP方法和URI 如果我们在过滤器中使用,那么spring将无法再次使用它进行json到对象的映射。在输入流到对象映射期间的某个地方,我们可以插入记录器吗? 更新: 我们可以在MessageConverter中编写日志代码,但这似乎不是一个好主意。

  • 问题内容: 如何在请求的模块响应中解压缩压缩的正文? 我已经在网上尝试了几个示例,但似乎都没有用。 问题答案: 我也无法获得工作请求,因此最终使用了http。