| <?xml version="1.0"?> |
| <!-- |
| |
| Copyright (c) 2016, 2018 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;. |
| </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> |
| </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, 2016 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-SNAPSHOT (Apache HttpClient 4.5) |
| |
| May 09, 2016 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> |