<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Jersey 使用過濾器記錄請求和響應實體 > 原文: [https://howtodoinjava.com/jersey/jersey-custom-logging-request-and-response-entities-using-filter/](https://howtodoinjava.com/jersey/jersey-custom-logging-request-and-response-entities-using-filter/) 默認情況下,Jersey 使用 JUL 進行日志記錄 - 不會在日志中打印請求/響應實體主體。 要打印實體內容,必須創建自己的`LoggingFiler`,并將其注冊為默認值`org.glassfish.jersey.filter.LoggingFilter`。 在此示例中,我正在創建一個這樣的基本`CustomLoggingFilter`,它擴展了`org.glassfish.jersey.filter.LoggingFilter`并實現了`ContainerRequestFilter`和`ContainerResponseFilter`接口,以便它可以攔截正在進行的請求和響應。 ```java Table of Contents Create CustomLoggingFilter Register CustomLoggingFilter Log statements with default LoggingFilter Log statements with CustomLoggingFilter ``` ## 創建`CustomLoggingFilter` 讓我們直接轉到此 Jersey 演示的自定義日志記錄過濾器類。 ```java package com.howtodoinjava.jersey.provider; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.ContainerResponseContext; import javax.ws.rs.container.ContainerResponseFilter; import org.glassfish.jersey.filter.LoggingFilter; import org.glassfish.jersey.message.internal.ReaderWriter; public class CustomLoggingFilter extends LoggingFilter implements ContainerRequestFilter, ContainerResponseFilter { @Override public void filter(ContainerRequestContext requestContext) throws IOException { StringBuilder sb = new StringBuilder(); sb.append("User: ").append(requestContext.getSecurityContext().getUserPrincipal() == null ? "unknown" : requestContext.getSecurityContext().getUserPrincipal()); sb.append(" - Path: ").append(requestContext.getUriInfo().getPath()); sb.append(" - Header: ").append(requestContext.getHeaders()); sb.append(" - Entity: ").append(getEntityBody(requestContext)); System.out.println("HTTP REQUEST : " + sb.toString()); } private String getEntityBody(ContainerRequestContext requestContext) { ByteArrayOutputStream out = new ByteArrayOutputStream(); InputStream in = requestContext.getEntityStream(); final StringBuilder b = new StringBuilder(); try { ReaderWriter.writeTo(in, out); byte[] requestEntity = out.toByteArray(); if (requestEntity.length == 0) { b.append("").append("\n"); } else { b.append(new String(requestEntity)).append("\n"); } requestContext.setEntityStream( new ByteArrayInputStream(requestEntity) ); } catch (IOException ex) { //Handle logging error } return b.toString(); } @Override public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException { StringBuilder sb = new StringBuilder(); sb.append("Header: ").append(responseContext.getHeaders()); sb.append(" - Entity: ").append(responseContext.getEntity()); System.out.println("HTTP RESPONSE : " + sb.toString()); } } ``` ## 注冊`CustomLoggingFilter` 要注冊此`CustomLoggingFilter`,請以這種方式注冊。 ```java package com.howtodoinjava.jersey; import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; import com.howtodoinjava.jersey.provider.CustomLoggingFilter; public class CustomApplication extends ResourceConfig { public CustomApplication() { packages("com.howtodoinjava.jersey"); register(JacksonFeature.class); register(CustomLoggingFilter.class); } } ``` ## 使用默認`LoggingFilter`的日志語句 現在,如果您嘗試使用不帶`CustomLoggingFilter`的任何現有 REST API,日志將以這種方式顯示。 **請求** ![Jersey-custom-logging](https://img.kancloud.cn/c4/dd/c4dd8caa0040f77fea69db65fda0ca6b_760x236.png) **日志** ```java Sep 30, 2015 6:18:41 PM org.glassfish.jersey.filter.LoggingFilter log INFO: 1 * Server has received a request on thread http-bio-8080-exec-4 1 > POST http://localhost:8080/JerseyDemos/rest/employees 1 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 1 > accept-encoding: gzip, deflate 1 > accept-language: null 1 > cache-control: no-cache 1 > connection: keep-alive 1 > content-length: 35 1 > content-type: application/json; charset=UTF-8 1 > host: localhost:8080 1 > pragma: no-cache 1 > user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Sep 30, 2015 6:18:41 PM org.glassfish.jersey.filter.LoggingFilter log INFO: 1 * Server responded with a response on thread http-bio-8080-exec-4 1 < 200 1 < Content-Type: application/json ``` ## 使用`CustomLoggingFilter`的日志語句 添加`CustomLoggingFilter`后,您將獲得更好的日志,如下所示。 ```java HTTP REQUEST : User: unknown - Path: employees - Header: {host=[localhost:8080], user-agent=[Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0], accept=, accept-language=[null], accept-encoding=[gzip, deflate], content-type=[application/json; charset=UTF-8], content-length=[35], connection=[keep-alive], pragma=[no-cache], cache-control=[no-cache]} - Entity: {"id":2,"name":"Alex Kolenchiskey"} HTTP RESPONSE : Header: {Content-Type=[application/json]} - Entity: Employee [id=2, name=Alex Kolenchiskey] ``` 請根據需要隨時從日志語句中添加/刪除信息。 您可以在這些日志中添加許多其他有用的信息。 **祝您學習愉快!**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看