<?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 Runtime Dependencies</title>
  </properties>

  <body>
    <section name="Log4j Runtime Dependencies">
      <p>
        Some Log4J features depend on external libraries. This page lists the required and optional
        dependencies.
      </p>
      <p>
        As of version 2.10.0 the Log4j API is a Java module (with a module-info.java). Many of the other
        jars are automatic modules. The characteristics of the modules are:

        <table>
          <tr>
            <th>Artifact Name</th>
            <th>Module Name</th>
            <th>Module Characteristics</th>
          </tr>
          <tr>
            <td>log4j-api</td>
            <td>org.apache.logging.log4j</td>
            <td>
              <table>
                <tr>
                  <th>Module Directive</th>
                  <th>Notes</th>
                </tr>
                <tr>
                  <td>exports org.apache.logging.log4j</td>
                  <td></td>
                </tr>
                <tr>
                  <td>exports org.apache.logging.log4j.message</td>
                  <td></td>
                </tr>
                <tr>
                  <td>exports org.apache.logging.log4j.simple</td>
                  <td></td>
                </tr>
                <tr>
                  <td>exports org.apache.logging.log4j.spi</td>
                  <td></td>
                </tr>
                <tr>
                  <td>exports org.apache.logging.log4j.spi</td>
                  <td></td>
                </tr>
                <tr>
                  <td>exports org.apache.logging.log4j.util</td>
                  <td>Some classes in this package are used by the logging implementation and should be
                    considered private. The module info definition may be modified in the future to export
                    these only to the logging implmentation.</td>
                </tr>
                <tr>
                  <td>uses org.apache.logging.log4j.spi.Provider</td>
                  <td>Service that must be provided by the logging implementation.</td>
                </tr>
              </table>
            </td>
          </tr>
          <tr>
            <td>log4j-appserver</td>
            <td>org.apache.logging.log4j.appserver</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-cassandra</td>
            <td>org.apache.logging.log4j.cassandra</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-core</td>
            <td>org.apache.logging.log4j.core</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-couchdb</td>
            <td>org.apache.logging.log4j.couchdb</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-docker</td>
            <td>org.apache.logging.log4j.docker</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-1.2-api</td>
            <td>org.apache.log4j</td>
            <td>Automatic Module</td>
          </tr>

          <tr>
            <td>log4j-flume-ng</td>
            <td>org.apache.logging.log4j.flume</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-iostreams</td>
            <td>org.apache.logging.log4j.iostreams</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-jcl</td>
            <td>org.apache.logging.log4j.jcl</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-jmx-gui</td>
            <td>org.apache.logging.log4j.jmx.gui</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-jul</td>
            <td>org.apache.logging.log4j.jul</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-mongodb</td>
            <td>org.apache.logging.log4j.mongodb</td>
            <td>Automatic Module</td>
          </tr>

          <tr>
            <td>log4j-osgi</td>
            <td>org.apache.logging.log4j.osgi</td>
            <td>Automatic Module. Unclear how OSGi will support Java modules.</td>
          </tr>
          <tr>
            <td>log4j-slf4j-impl</td>
            <td>org.apache.logging.log4j.slf4j.impl</td>
            <td>Automatic Module. May require renaming should SLF4J ever require all implementations to have the same
              module name.</td>
            </tr>
          <tr>
            <td>log4j-taglib</td>
            <td>org.apache.logging.log4j.taglib</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-to-slf4j</td>
            <td>org.apache.logging.log4j.slf4j</td>
            <td>Automatic Module</td>
          </tr>
          <tr>
            <td>log4j-web</td>
            <td>org.apache.logging.log4j.web</td>
            <td>Automatic Module</td>
          </tr>
        </table>
      </p>
      <p>
        As of version 2.9.1 Log4j supports Java 9 but will still work in Java 7 or 8. In this version log4j-api is
        packaged as a multi-release jar and supports the use of the StackWalker and Process APIs.
      </p>
      <p>
        As of version 2.4, Log4J requires Java 7.
      </p>
      <p>
        Log4j version 2.3 and older require Java 6.
      </p>

      <a name="log4j-api" />
      <h4>log4j-api</h4>
      <p>
        The Log4J <a href="log4j-api/index.html">API</a> module has no external dependencies.
      </p>

      <a name="log4j-core" />
      <h4>log4j-core</h4>
      <p>
        The Log4J <a href="log4j-core/index.html">Implementation</a> has several optional
        <a href="log4j-core/dependencies.html">dependencies</a>.
        See the <a href="log4j-core/dependencies.html#Dependency_Tree">Dependency Tree</a> for the
        exact list of JAR files needed for these features.
      </p>
      <table>
        <caption align="top">Optional Dependencies per Feature in Log4J Implementation</caption>
        <tr>
          <th>Feature</th>
          <th>Requirements</th>
        </tr>
        <tr>
          <td>XML configuration</td>
          <td>-</td>
        </tr>
        <tr>
          <td>Properties configuration</td>
          <td>-</td>
        </tr>
        <tr>
          <td>JSON configuration</td>
          <td><a href="https://github.com/FasterXML/jackson">Jackson core and databind</a></td>
        </tr>
        <tr>
          <td>YAML configuration</td>
          <td><a href="https://github.com/FasterXML/jackson">Jackson databind</a> and <a href="https://github.com/FasterXML/jackson-dataformat-yaml">YAML data format</a></td>
        </tr>
        <tr>
          <td>CSV Layout</td>
          <td><a href="https://commons.apache.org/proper/commons-csv/">Apache Commons CSV</a></td>
        </tr>
        <tr>
          <td>JSON Layout</td>
          <td><a href="https://github.com/FasterXML/jackson">Jackson core and databind</a></td>
        </tr>
        <tr>
          <td>XML Layout</td>
          <td><a href="https://github.com/FasterXML/jackson">Jackson core, databind and dataformat XML</a><br />
              And <code>com.fasterxml.woodstox:woodstox-core:5.0.2</code></td>
        </tr>
        <tr>
          <td>YAML Layout</td>
          <td><a href="https://github.com/FasterXML/jackson">Jackson core, databind</a> and <a href="https://github.com/FasterXML/jackson-dataformat-yaml">YAML data format</a></td>
        </tr>
        <tr>
          <td>Async Loggers</td>
          <td><a href="http://lmax-exchange.github.io/disruptor/">LMAX Disruptor</a></td>
        </tr>
        <tr>
          <td>Kafka Appender</td>
          <td><a href="http://kafka.apache.org/">Kafka client library</a>. Note that you need to use a version of
          the Kafka client library matching the Kafka server used.</td>
        </tr>
        <tr>
          <td>SMTP Appender</td>
          <td>an implementation of <code>javax.mail</code></td>
        </tr>
        <tr>
          <td>JMS Appender</td>
          <td>a JMS broker like <a href="http://activemq.apache.org/">Apache ActiveMQ</a></td>
        </tr>
        <tr>
          <td>Windows console color support</td>
          <td><a href="http://jansi.fusesource.org/">Jansi</a></td>
        </tr>
        <tr>
          <td>JDBC Appender</td>
          <td>a JDBC driver for the database you choose to write events to</td>
        </tr>
        <tr>
          <td>JPA Appender</td>
          <td>the Java Persistence API classes, a JPA provider implementation, and a decorated
            entity that the user implements. It also requires an appropriate JDBC driver
          </td>
        </tr>
        <tr>
          <td>NoSQL Appender with MongoDB provider</td>
          <td>MongoDB Java Client driver and Log4j MongoDB library</td>
        </tr>
        <tr>
          <td>NoSQL Appender with Apache CouchDB provider</td>
          <td>LightCouch CouchDB client library and Log4j CouchDB library</td>
        </tr>
        <tr>
          <td>Cassandra Appender</td>
          <td>Datastax Cassandra driver and Log4j Cassandra library</td>
        </tr>
        <tr>
          <td>Bzip2, Deflate, Pack200, and XZ compression on rollover</td>
          <td><a href="http://commons.apache.org/proper/commons-compress/">Apache Commons Compress</a>.
            In addition, XZ requires <a href="http://tukaani.org/xz/java.html">XZ for Java</a>.
          </td>
        </tr>
        <tr>
          <td>ZeroMQ Appender</td>
          <td>
            The ZeroMQ appender uses the <a href="https://github.com/zeromq/jeromq">JeroMQ</a> library which is
            licensed under the terms of the Mozilla Public License Version 2.0 (MPLv2). For details see the
            file <a href="https://github.com/zeromq/jeromq/blob/master/LICENSE">LICENSE</a> included with the JeroMQ
            distribution.
          </td>
        </tr>
      </table>
      <a name="log4j-docker"/>
      <h4>log4j-docker</h4>
      <p>
        <a href="log4j-docker/index.html">Log4j Docker Support</a> requires
        <a href="https://github.com/FasterXML/jackson">Jackson annotations, core, and databind</a>. See the
        <a href="log4j-docker/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of
        JAR files needed.
      </p>
      <a name="log4j-jcl" />
      <h4>log4j-jcl</h4>
      <p>
        The <a href="log4j-jcl/index.html">Commons Logging Bridge</a> requires
        <a href="http://commons.apache.org/proper/commons-logging/">Commons Logging</a>. See the
        <a href="log4j-jcl/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact
        list of JAR files needed.
      </p>

      <a name="log4j-1.2-api" />
      <h4>log4j-1.2-api</h4>
      <p>
        The <a href="log4j-1.2-api/index.html">Log4j 1.2 Bridge</a> has no external dependencies.
        This only requires the Log4j API. Including Log4j Core provides optional, extra functionality.
      </p>

      <a name="log4j-slf4j-impl" />
      <h4>log4j-slf4j-impl</h4>
      <p>
        The Log4j 2 <a href="log4j-slf4j-impl/index.html">SLF4J Binding</a> depends on the
        <a href="http://www.slf4j.org/">SLF4J</a> API. See the
        <a href="log4j-slf4j-impl/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact
        list of JAR files needed.
      </p>
      <p class="text-warning">
        <i class="icon-exclamation-sign"/>
        <b><font color="red">
        Do not use this with the <a href="#log4j-to-slf4j">log4j-to-slf4j</a> module.
        </font></b>
      </p>

      <a name="log4j-jul" />
      <h4>log4j-jul</h4>
      <p>
        The Log4j 2 <a href="log4j-jul/index.html">Java Util Logging Adapter</a> has no external dependencies.
        It optionally depends on the <a href="log4j-api/index.html">Log4j Core</a> library. The only required module
        is the Log4j API.
      </p>

      <a name="log4j-to-slf4j" />
      <h4>log4j-to-slf4j</h4>
      <p>
        The <a href="log4j-to-slf4j/index.html">Log4j 2 to SLF4J Adapter</a> requires the
        <a href="http://www.slf4j.org/">SLF4J</a> API and an SLF4J implementation. See the
        <a href="log4j-to-slf4j/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of JAR files needed.
      </p>
      <p class="text-warning">
        <i class="icon-exclamation-sign"/>
        <b><font color="red">
        Do not use this with the <a href="#log4j-slf4j-impl">log4j-slf4j-impl</a> module.
        </font></b>
      </p>

      <a name="log4j-flume-ng" />
      <h4>log4j-flume-ng</h4>
      <p>
        The <a href="log4j-flume-ng/index.html">Flume Appender</a> requires
        <a href="http://flume.apache.org/">Apache Flume</a> and <a href="http://avro.apache.org/">Apache Avro</a>.
        The persistent agent uses Berkeley DB. See the
        <a href="log4j-flume-ng/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of JAR files needed.
      </p>
      <a name="log4j-spring-cloud-config-client"/>
      <h4>log4j-spring-cloud-config-client</h4>
      <p>
        <a href="log4j-spring-cloud-config/log4j-spring-cloud-config-client/index.html">Log4j Spring Cloud Config Client</a> requires
        <a href="https://spring.io/projects/spring-cloud-config">Spring Cloud Config</a>.
        <a href="https://spring.io/projects/spring-cloud-bus">Spring Cloud Bus</a> is required if notification of logging
        configuration changes is desired. <a href="https://spring.io/projects/spring-boot">Spring Boot</a> is required
        but applications do not have to be packaged as a Spring Boot application.
        <a href="log4j-spring-cloud-config/log4j-spring-cloud-config-client/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of
        JAR files needed.
      </p>
      <a name="log4j-taglib" />
      <h4>log4j-taglib</h4>
      <p>
        The Log4j <a href="log4j-taglib/index.html">Log Tag Library</a> requires the
        <a href="http://jakarta.apache.org/taglibs/log/">Jakarta Commons Log Taglib</a> and the Servlet API. See the
        <a href="log4j-taglib/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of JAR files needed.
      </p>

      <a name="log4j-jmx-gui" />
      <h4>log4j-jmx-gui</h4>
      <p>
        The Log4j <a href="log4j-jmx-gui/index.html">JMX GUI</a> requires the JConsole jar when run as a JConsole plugin.
        Otherwise it has no external dependencies. See the
        <a href="log4j-jmx-gui/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of JAR files needed.
      </p>

      <a name="log4j-web" />
      <h4>log4j-web</h4>
      <p>
        The Log4j <a href="log4j-web/index.html">Web</a> module requires the Servlet API. See the
        <a href="log4j-web/dependencies.html#Dependency_Tree">Dependency Tree</a> for the exact list of JAR files needed.
        Note that this works with the Servlet 2.5 API as well as the Servlet 3.x API.
      </p>

      <a name="log4j-couchdb" />
      <h4>log4j-couchdb</h4>
      <p>
        The Log4J <a href="log4j-couchdb/index.html">CouchDB</a> module depends on
        the <a href="http://www.lightcouch.org/">LightCouch</a> CouchDB client library.
      </p>

      <a name="log4j-mongodb" />
      <h4>log4j-mongodb</h4>
      <p>
        The Log4J <a href="log4j-mongodb/index.html">MongoDB</a> module depends on
        the <a href="http://docs.mongodb.org/ecosystem/drivers/java/">MongoDB Java Client driver</a>.
      </p>

      <a name="log4j-cassandra" />
      <h4>log4j-cassandra</h4>
      <p>
        The Log4J <a href="log4j-cassandra/index.html">Cassandra</a> module depends on
        the <a href="http://docs.datastax.com/en/developer/driver-matrix/doc/javaDrivers.html">Datastax Cassandra driver</a>.
      </p>

      <a name="log4j-iostreams" />
      <h4>log4j-iostreams</h4>
      <p>
        The Log4j <a href="log4j-iostreams/index.html">IO Streams</a> module has no external dependencies.
        This only requires the Log4j API.
      </p>

      <a name="log4j-api-scala" />
      <h4>log4j-api-scala</h4>
      <p>
        The Log4j <a href="manual/scala-api.html">Scala API</a> requires Scala runtime library and reflection in
        addition to the Log4j API.
      </p>

    </section>
  </body>
</document>
