<?xml version="1.0"?>
<!--

    Copyright (c) 2016, 2021 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>
                    </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>