| <?xml version="1.0"?> | 
 | <!-- | 
 |  | 
 |     Copyright (c) 2016, 2022 Oracle and/or its affiliates. All rights reserved. | 
 |  | 
 |     This program and the accompanying materials are made available under the | 
 |     terms of the Eclipse Public License v. 2.0, which is available at | 
 |     http://www.eclipse.org/legal/epl-2.0. | 
 |  | 
 |     This Source Code may also be made available under the following Secondary | 
 |     Licenses when the conditions for such availability set forth in the | 
 |     Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | 
 |     version 2 with the GNU Classpath Exception, which is available at | 
 |     https://www.gnu.org/software/classpath/license.html. | 
 |  | 
 |     SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | 
 |  | 
 | --> | 
 |  | 
 | <!DOCTYPE chapter [<!ENTITY % ents SYSTEM "jersey.ent" > %ents;]> | 
 | <chapter xmlns="http://docbook.org/ns/docbook" | 
 |         version="5.0" | 
 |         xml:lang="en" | 
 |         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | 
 |         xmlns:xi="http://www.w3.org/2001/XInclude" | 
 |         xmlns:xlink="http://www.w3.org/1999/xlink" | 
 |         xsi:schemaLocation="http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd | 
 |                              http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd" | 
 |         xml:id="logging_chapter"> | 
 |     <title>Logging</title> | 
 |     <section xml:id="logging"> | 
 |         <title>Logging traffic</title> | 
 |         <section> | 
 |             <title>Introduction</title> | 
 |             <para> | 
 |                 Jersey Logging supports the logging request and response via internal client and server filters, which are | 
 |                 configured and registered by &jersey.logging.LoggingFeature; 's properties. &lit.jersey.logging.LoggingFeature; | 
 |                 has been introduced in Jersey 2.23 version and deprecates an older &lit.jersey.logging.LoggingFilter;. | 
 |                 Jersey of version 3.x fully support all logging features of Jersey 2.x. | 
 |             </para> | 
 |             <para> | 
 |                 &lit.jersey.logging.LoggingFeature; might be discovered by | 
 |                 <link linkend="deployment.autodiscoverable">auto-discoverable mechanism</link> | 
 |                 or initialized by registering on client or server components. Client or server logging filter is initialized | 
 |                 depending on which context is &lit.jersey.logging.LoggingFeature; registered with. | 
 |             </para> | 
 |         </section> | 
 |         <section> | 
 |             <title>Configuration and registering</title> | 
 |             <section> | 
 |                 <title>Configuration options</title> | 
 |                 <para> | 
 |                     <itemizedlist> | 
 |                         <title>Configurable options</title> | 
 |                         <listitem> | 
 |                             <para> | 
 |                                 <literal>Logger name</literal> | 
 |                             </para> | 
 |                             <para> | 
 |                                 Defines a logger used to log request and response messages. | 
 |                             </para> | 
 |                             <para>Default value is &jersey.logging.LoggingFeature.DEFAULT_LOGGER_NAME;. | 
 |                             </para> | 
 |                         </listitem> | 
 |                         <listitem> | 
 |                             <para> | 
 |                                 <literal>Logger level</literal> | 
 |                             </para> | 
 |                             <para> | 
 |                                 Defines level that will be used to log messages by logging filters. Messages will be logged only | 
 |                                 if the effective level of the logger allows it. | 
 |                             </para> | 
 |                             <para>Default value is &jersey.logging.LoggingFeature.DEFAULT_LOGGER_LEVEL;. | 
 |                             </para> | 
 |                         </listitem> | 
 |                         <listitem> | 
 |                             <para> | 
 |                                 <literal>Verbosity</literal> | 
 |                             </para> | 
 |                             <para> | 
 |                                 Verbosity determines how detailed message will be logged. | 
 |                                 See &jersey.logging.LoggingFeature.Verbosity; javadoc. | 
 |                                 <itemizedlist> | 
 |                                     <listitem> | 
 |                                         <para> | 
 |                                             The lowest verbosity &jersey.logging.LoggingFeature.Verbosity.HEADERS_ONLY; will log | 
 |                                             only request/response headers. | 
 |                                         </para> | 
 |                                     </listitem> | 
 |                                     <listitem> | 
 |                                         <para> | 
 |                                             The medium verbosity (&jersey.logging.LoggingFeature.Verbosity.PAYLOAD_TEXT;) will log | 
 |                                             request/response headers, as well as an entity if considered a readable text. The | 
 |                                             entity is considered a readable text, if &jaxrs.core.MediaType; is | 
 |                                             <literal>text/*</literal> | 
 |                                             or is one of | 
 |                                             <itemizedlist> | 
 |                                                 <listitem> | 
 |                                                     <para> | 
 |                                                         <literal>application/atom+xml</literal> | 
 |                                                     </para> | 
 |                                                 </listitem> | 
 |                                                 <listitem> | 
 |                                                     <para> | 
 |                                                         <literal>application/json</literal> | 
 |                                                     </para> | 
 |                                                 </listitem> | 
 |                                                 <listitem> | 
 |                                                     <para> | 
 |                                                         <literal>application/svg+xml</literal> | 
 |                                                     </para> | 
 |                                                 </listitem> | 
 |                                                 <listitem> | 
 |                                                     <para> | 
 |                                                         <literal>application/x-www-form-urlencoded</literal> | 
 |                                                     </para> | 
 |                                                 </listitem> | 
 |                                                 <listitem> | 
 |                                                     <para> | 
 |                                                         <literal>application/xhtml+xml</literal> | 
 |                                                     </para> | 
 |                                                 </listitem> | 
 |                                                 <listitem> | 
 |                                                     <para> | 
 |                                                         <literal>application/xml</literal> | 
 |                                                     </para> | 
 |                                                 </listitem> | 
 |                                             </itemizedlist> | 
 |                                         </para> | 
 |                                     </listitem> | 
 |                                     <listitem> | 
 |                                         <para> | 
 |                                             The highest verbosity &jersey.logging.LoggingFeature.Verbosity.PAYLOAD_ANY; | 
 |                                             will log all types of an entity (besides the request/response headers. | 
 |                                         </para> | 
 |                                     </listitem> | 
 |                                 </itemizedlist> | 
 |                                 Note that the entity is logged up to the specified maximum number of bytes | 
 |                                 (see &jersey.logging.LoggingFeature.LOGGING_FEATURE_MAX_ENTITY_SIZE;). | 
 |                             </para> | 
 |                             <para> | 
 |                                 Default value is &jersey.logging.LoggingFeature.DEFAULT_VERBOSITY;. | 
 |                             </para> | 
 |                         </listitem> | 
 |                         <listitem> | 
 |                             <para> | 
 |                                 <literal>Maximum entity size</literal> | 
 |                             </para> | 
 |                             <para> | 
 |                                 Maximum number of entity bytes to be logged (and buffered) - if the entity is larger, logging | 
 |                                 filter will print (and buffer in memory) only the specified number of bytes and print "...more..." | 
 |                                 string at the end. Negative values are interpreted as zero. | 
 |                             </para> | 
 |                             <para>Default value &jersey.logging.LoggingFeature.DEFAULT_MAX_ENTITY_SIZE;. | 
 |                             </para> | 
 |                         </listitem> | 
 |                         <listitem> | 
 |                             <para> | 
 |                                 <literal>Redact HTTP headers</literal> | 
 |                             </para> | 
 |                             <para> | 
 |                                 HTTP headers with sensitive information can be configured to print "[redacted]" in place of their | 
 |                                 real values. This should be a string with the names of the HTTP headers to be redacted, each entry | 
 |                                 separated by a semicolon (;). Header names will be compared in a case-insensitive manner and | 
 |                                 ignoring initial or trailing whitespaces. | 
 |                             </para> | 
 |                             <para>Default value &jersey.logging.LoggingFeature.DEFAULT_REDACT_HEADERS;. | 
 |                             </para> | 
 |                         </listitem> | 
 |                     </itemizedlist> | 
 |                 </para> | 
 |             </section> | 
 |             <section> | 
 |                 <title>Configuration properties</title> | 
 |                 <para> | 
 |                     The feature is enabled on when auto-discoverable mechanism is not disabled and at least one of the feature's | 
 |                     property is set. For enabling client or server logging filter one of the | 
 |                     <link linkend="appendix-properties-common">common properties</link> or | 
 |                     <literal>_CLIENT</literal> | 
 |                     suffixed <link linkend="appendix-properties-client">properties</link>, or | 
 |                     <literal>_SERVER</literal> <link linkend="appendix-properties-server">properties</link> | 
 |                     respectively. | 
 |                 </para> | 
 |                 <para> | 
 |                     An example of initializing server-side logging with the highest verbosity. | 
 |                     <example> | 
 |                         <title>Logging on the client side</title> | 
 |                         <programlisting language="java" linenumbering="numbered"><![CDATA[    ClientConfig clientConfig = new ClientConfig(); | 
 |     clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_CLIENT, LoggingFeature.Verbosity.PAYLOAD_ANY); | 
 |     Client client = ClientBuilder.newClient(clientConfig);]]> | 
 |                         </programlisting> | 
 |                     </example> | 
 |                 </para> | 
 |                 <para> | 
 |                     The &lit.jersey.logging.LoggingFeature; might be registered explicitly on &jersey.server.ResourceConfig; for | 
 |                     server-side logging or on &jaxrs.client.Client; for client-side logging. | 
 |                 </para> | 
 |                 <example> | 
 |                     <title>Register &lit.jersey.logging.LoggingFeature; via constructor | 
 |                     </title> | 
 |                     <programlisting language="java" linenumbering="numbered"><![CDATA[        ResourceConfig config = new ResourceConfig(HelloWorldResource.class); | 
 |         config.register(new LoggingFeature(LOGGER, LoggingFeature.Verbosity.PAYLOAD_ANY)); | 
 | ]]></programlisting> | 
 |                 </example> | 
 |             </section> | 
 |             <section> | 
 |                 <para> | 
 |                     Following examples demonstrate registering &lit.jersey.logging.LoggingFeature; on server-side with default | 
 |                     values and values defined by one of the public constructors (see &jersey.logging.LoggingFeature;). | 
 |                 </para> | 
 |                 <example> | 
 |                     <title>Register &lit.jersey.logging.LoggingFeature; class | 
 |                     </title> | 
 |                     <programlisting language="java" linenumbering="numbered"><![CDATA[        ResourceConfig config = new ResourceConfig(HelloWorldResource.class); | 
 |         config.register(LoggingFeature.class); | 
 | ]]></programlisting> | 
 |                 </example> | 
 |                 <para>An example of server-side logging with entity | 
 |                     <literal>Hello World!</literal> | 
 |                 </para> | 
 |                 <screen linenumbering="numbered"><![CDATA[May 09, 2020 2:55:33 PM org.glassfish.jersey.logging.LoggingInterceptor log | 
 | INFO: 1 * Server has received a request on thread grizzly-http-server-0 | 
 | 1 > GET http://localhost:9998/helloworld | 
 | 1 > accept: text/plain | 
 | 1 > accept-encoding: gzip,deflate | 
 | 1 > connection: Keep-Alive | 
 | 1 > host: localhost:9998 | 
 | 1 > user-agent: Jersey/3.0.0 (Apache HttpClient 4.5.9) | 
 |  | 
 | May 09, 2020 2:55:33 PM org.glassfish.jersey.logging.LoggingInterceptor log | 
 | INFO: 1 * Server responded with a response on thread grizzly-http-server-0 | 
 | 1 < 200 | 
 | 1 < Content-Type: text/plain | 
 | Hello World!]]></screen> | 
 |             </section> | 
 |         </section> | 
 |     </section> | 
 | </chapter> |