<?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.
-->

<document>
    <properties>
        <title>Log4J2 Guide</title>
        <author email="rgoers@apache.org">Ralph Goers</author>
        <author email="ggregory@apache.org">Gary Gregory</author>
        <author email="sdeboy@apache.org">Scott Deboy</author>
    </properties>

    <body>
        <section name="Apache Log4j 2">

          <p>
            Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j
            1.x, and provides many of the improvements available in Logback while fixing some inherent problems in
            Logback's architecture.
          </p>
          
          <p>Some of the features and improvements in Log4j 2 are:</p>
          
          <dl>
            <dt>API Separation</dt>
            <dd>
              The API for Log4j is separate from the implementation making it clear for application developers 
              which classes and methods they can use while ensuring forward compatibility. This allows the 
              Log4j team to improve the implementation safely and in a compatible manner.
            </dd>
            <dt>Improved Performance</dt>
            <dd>
              Log4j 2 contains next-generation Asynchronous Loggers based
              on the LMAX Disruptor library. In multi-threaded scenarios
              Asynchronous Loggers have 10 times higher throughput and 
              orders of magnitude lower latency than Log4j 1.x and Logback.
              See <a href="manual/async.html#Performance">Asynchronous Logging Performance</a>
              for details.
              Otherwise, Log4j 2 performs faster than Log4j 1.x in critical areas 
              and similarly to Logback under most circumstances.
              See <a href="performance.html">Performance</a> for more information.
            </dd>
            <dt>Support for multiple APIs</dt>
            <dd>
              While the Log4j 2 API will provide the best performance, Log4j 2 provides support for the SLF4J and 
              Commons Logging APIs.
            </dd>
            <dt>Automatic Reloading of Configurations</dt>
            <dd>
              Like Logback, Log4j 2 can automatically reload its configuration upon modification. Unlike Logback,
              it will do so without losing log events while reconfiguration is taking place.
            </dd>
            <dt>Advanced Filtering</dt>
            <dd>
              Like Logback, Log4j 2 supports filtering based on context data, markers, regular expressions, 
              and other components in the Log event. Filtering can be specified to apply to all events 
              before being passed to Loggers or as they pass through Appenders. In addition, filters can also 
              be associated with Loggers. Unlike Logback, you can use a common Filter class in any of these 
              circumstances.
            </dd>
            <dt>Plugin Architecture</dt>
            <dd>
              Log4j uses the plugin pattern to configure components. As such, you do not need to write code 
              to create and configure an Appender, Layout, Pattern Converter, and so on. Log4j automatically 
              recognizes plugins and uses them when a configuration references them.
            </dd>
            <dt>Property Support</dt>
            <dd>
              You can reference properties in a configuration, Log4j will directly replace them, or Log4j will 
              pass them to an underlying component that will dynamically resolve them. Properties come from values
              defined in the configuration file, system properties, environment variables, the ThreadContext
              Map, and data present in the event. Users can further customize the property providers by
              adding their own <a href="../lookups.html">Lookup</a> Plugin.
            </dd>
          </dl>

          <subsection name="Documentation">
            <p>
              The Log4j 2 User's Guide is available on this <a href="manual/index.html">site</a> or as a downloadable
              <a href="log4j-users-guide.pdf">PDF</a>.
            </p>
          </subsection>
          
          <subsection name="Requirements">
             <p>
               Log4j 2 requires Java 6.
               Some features require optional dependencies; the documentation for these features specifies the 
               dependencies.
            </p>
          </subsection>
  
          <subsection name="News">
            <p>
              Log4j 2 is now available for testing. The API for Log4j 2 is not compatible with Log4j 1.x, however an adapter
              is available to allow applications to continue to use the Log4j 1.x API. Adapters are also available for
              Apache Commons Logging and SLF4J.
            </p>
          </subsection>
        </section>
    </body>
</document>

