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

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.

-->

<chapter xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="JMS-Client-0-8-Logging">
  <title>Logging</title>
  <para>The Client uses the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.slf4j.org">Apache SLF4J</link> logging
    framework. All logging activity created by the client is directed through the SLF4J API. SLF4J
    is a is a façade for other common logging frameworks. This makes it easy for application authors
    to use their prefered logging framework in their application stack, and have the Client
    use it too. </para>
  <para>SLF4J suppplies bindings for many common logging frameworks (<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${oracleJdkDocUrl}java/util/logging/package-summary.html">JUL</link>, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://logging.apache.org/log4j/1.2/">Apache Log4J</link>, <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://logback.qos.ch">Logback</link>.</para>
  <para>Include the SLF4J binding corresponding to the logging framework of your choosen logging
    framework on classpath. For full details, see the SLF4J <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.slf4j.org">documentation</link>.</para>

  <section xml:id="JMS-Client-0-8-Logging-RecommendedProductionLoggingLevel">
    <title>Recommended Production Logging Level</title>
    <para>In production, it is recommended that you configure your logging framework is configured
      with logger <literal>org.apache.qpid</literal> set to <literal>WARN</literal>.</para>
    <para>If you are using Apache Log4j with a log4j.properties file, this simply means adding the
      following line:</para>
    <screen>
      org.apache.qpid=WARN
    </screen>
    <para>If you are using another logging framework, or you are using Log4j but configuring in
      another manner, refer to the documentation accompanying the logging framework for details of
      how to proceed.</para>
  </section>
  <section xml:id="JMS-Client-0-8-Logging-EnablingDebugLogging">
    <title>Enabling Debug</title>
    <para>If you are experiencing a problem, it can be informative to enable debug logging to allow
      the behaviour of the Client to be understood at a deeper level.</para>
    <para>To do this, set the <literal>org.apache.qpid</literal> logger to
      <literal>DEBUG</literal>.</para>
    <para>If you are using Apache Log4j with a log4j.properties file, this simply means adding (or
      changing) the following line:</para>
    <screen>
      log4j.logger.org.apache.qpid=DEBUG
    </screen>
    <para>If you are using another logging framework, or you are using Log4j but configuring in
      another manner, refer to the documentation accompanying the logging framework for details of
      how to proceed.</para>
  </section>

</chapter>
