<?xml version="1.0" encoding="UTF-8"?>
<!--
    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 xmlns="http://maven.apache.org/XDOC/2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
  <properties>
    <title>Log4j 2 Javadoc API Documentation and TLD Documentation</title>
    <author email="nickwilliams@apache.org">Nick Williams</author>
  </properties>

  <body>
    <section name="Javadoc API Documentation">
      <p>
        The table below contains links to the Javadoc API Documentation for the components you are most likely to use
        directly in code. You can also use the menu links on the left.
      </p>
      <table>
        <tr>
          <th>Component</th>
          <th>Description</th>
        </tr>
        <tr>
          <td><a href="log4j-api/apidocs/index.html">Log4j 2 API</a></td>
          <td>The interface that applications should use and code against.</td>
        </tr>
        <tr>
          <td><a href="log4j-core/apidocs/index.html">Implementation</a></td>
          <td>The standard implementation, also called the Log4j 2 Core, that contains Appenders, Filters, and more.</td>
        </tr>
        <tr>
          <td><a href="log4j-iostreams/apidocs/index.html">Log4j IO Streams</a></td>
          <td>Extra classes for dealing with older APIs that expect classes from <code>java.io</code> for logging.</td>
        </tr>
        <tr>
          <td><a href="log4j-taglib/apidocs/index.html">JSP Tag Library</a></td>
          <td>The tag library that enables Java-free logging in JavaServer Pages™ using Log4j 2.</td>
        </tr>
        <tr>
          <td><a href="log4j-taglib/tlddoc/index.html">JSP Tag Library (TLD Doc)</a></td>
          <td>The special Javadoc-like Tag Library Documentation for the Log4j 2 JSP Tag Library.</td>
        </tr>
      </table>

      <p>
        The table below contains links to the Javadoc API Documentation for all the other Log4j 2 components, which you
        likely will not use directly in code but instead will only configure or include in your dependencies.
      </p>
      <table>
        <tr>
          <th>Component</th>
          <th>Description</th>
        </tr>
        <tr>
          <td><a href="log4j-jcl/apidocs/index.html">Commons Logging Bridge</a></td>
          <td>A bridge that permits applications written against the Apache Commons Logging API to log using Log4j 2.</td>
        </tr>
        <tr>
          <td><a href="log4j-slf4j-impl/apidocs/index.html">SLF4J Binding</a></td>
          <td>A bridge that permits applications written against the SLF4J API to log using Log4j 2.</td>
        </tr>
        <tr>
          <td><a href="log4j-jul/apidocs/index.html">Java Util Logging Adapter</a></td>
          <td>A bridge that permits applications written against the <code>java.util.logging</code> API to log using
          Log4j 2.</td>
        </tr>
        <tr>
          <td><a href="log4j-1.2-api/apidocs/index.html">Log4j 1.2 API Bridge</a></td>
          <td>A bridge that permits applications written against the Log4j 1.2.x API to log using Log4j 2.</td>
        </tr>
        <tr>
          <td><a href="log4j-to-slf4j/apidocs/index.html">Log4j 2 to SLF4J Adapter</a></td>
          <td>An adapter that permits applications written against the Log4j 2 API to log using SLF4J.</td>
        </tr>
        <tr>
          <td><a href="log4j-flume-ng/apidocs/index.html">Apache Flume Appender</a></td>
          <td>An Appender that allows applications to send logging events to Apache Flume Agents.</td>
        </tr>
        <tr>
          <td><a href="log4j-jmx-gui/apidocs/index.html">Log4j JMX GUI</a></td>
          <td>A Java Swing-based client for remotely viewing the status logger and editing the Log4j configuration.</td>
        </tr>
        <tr>
          <td><a href="log4j-web/apidocs/index.html">Log4j Web Application Support</a></td>
          <td>Additional classes that enable multiple configurations within a Servlet Container.</td>
        </tr>
        <tr>
          <td><a href="log4j-nosql/apidocs/index.html">Log4j NoSQL Support</a></td>
          <td>Additional Appenders for NoSQL databases such as MongoDB and CouchDB.</td>
        </tr>
      </table>
    </section>
  </body>
</document>
