////
    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

        https://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.
////
= Runtime Dependencies

Some Log4j features depend on external libraries. This page lists the
required and optional dependencies.

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:

[cols="3h,5m,12a"]
|===
|Artifact Name |Module Name |Module Characteristics

|log4j-api
|org.apache.logging.log4j
|
[cols="m,"]
!===
!Module Directive !Notes

2+!exports org.apache.logging.log4j

2+!exports org.apache.logging.log4j.message

2+!exports org.apache.logging.log4j.simple

2+!exports org.apache.logging.log4j.spi

2+!exports org.apache.logging.log4j.spi

!exports org.apache.logging.log4j.util
!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 implementation.

!uses org.apache.logging.log4j.spi.Provider
!Service that must be provided by the logging implementation.
!===

|log4j-core
|org.apache.logging.log4j.core
|Automatic Module

|log4j-1.2-api
|org.apache.log4j
|Automatic Module

|log4j-appserver
|org.apache.logging.log4j.appserver
|Automatic Module

|log4j-flume-ng
|org.apache.logging.log4j.flume
|Automatic Module

|log4j-iostreams
|org.apache.logging.log4j.iostreams
|Automatic Module

|log4j-jcl
|org.apache.logging.log4j.jcl
|Automatic Module

|log4j-jmx-gui
|org.apache.logging.log4j.jmx.gui
|Automatic Module

|log4j-jul
|org.apache.logging.log4j.jul
|Automatic Module

|log4j-couchdb
|org.apache.logging.log4j.couchdb
|Automatic Module

|log4j-mongodb
|org.apache.logging.log4j.mongodb
|Automatic Module

|log4j-cassandra
|org.apache.logging.log4j.cassandra
|Automatic Module

|log4j-osgi
|org.apache.logging.log4j.osgi
|Automatic Module. Unclear how OSGi will support Java modules.

|log4j-slf4j-impl
|org.apache.logging.log4j.slf4j.impl
|Automatic Module. May require renaming should SLF4J ever require all implementations to have the same module name.

|log4j-to-slf4j
|org.apache.logging.log4j.slf4j
|Automatic Module

|log4j-taglib
|org.apache.logging.log4j.taglib
|Automatic Module

|log4j-web
|org.apache.logging.log4j.web
|Automatic Module
|===

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.

As of version 2.4, Log4j requires Java 7.

Log4j version 2.3 and older require Java 6.

log4j-api[[log4j-api]]::
The Log4j link:log4j-api/index.html[API] module has no external
dependencies.

log4j-core[[log4j-core]]::
The Log4j link:log4j-core/index.html[Implementation] has several
optional link:log4j-core/dependencies.html[dependencies]. See the
link:log4j-core/dependencies.html#Dependency_Tree[Dependency Tree] for
the exact list of JAR files needed for these features.

.Optional Dependencies per Feature in Log4j Implementation
[cols="1,3"]
|===
|Feature |Requirements

|XML configuration
|-

|Properties configuration
|-

|JSON configuration
|https://github.com/FasterXML/jackson[Jackson core and databind]

|YAML configuration
|https://github.com/FasterXML/jackson[Jackson databind] and https://github.com/FasterXML/jackson-dataformat-yaml[YAML data format]

|CSV Layout
|https://commons.apache.org/proper/commons-csv/[Apache Commons CSV]

|JSON Layout
|https://github.com/FasterXML/jackson[Jackson core and databind]

|XML Layout
|https://github.com/FasterXML/jackson[Jackson core, databind and dataformat XML] and `com.fasterxml.woodstox:woodstox-core:5.0.2`

|YAML Layout
|https://github.com/FasterXML/jackson[Jackson core, databind] and https://github.com/FasterXML/jackson-dataformat-yaml[YAML data format]

|Async Loggers
|http://lmax-exchange.github.io/disruptor/[LMAX Disruptor]

|Kafka Appender
|http://kafka.apache.org/[Kafka client library].
[NOTE]
====
You need to use a version of the Kafka client library matching the Kafka server used.
====

|SMTP Appender
|an implementation of `javax.mail`

|JMS Appender
|a JMS broker like http://activemq.apache.org/[Apache ActiveMQ]

|Windows console color support
|http://jansi.fusesource.org/[Jansi]

|JDBC Appender
|a JDBC driver for the database you choose to write events to

|JPA Appender
|the Java Persistence API classes, a JPA provider implementation, and a decorated entity that the user implements.
It also requires an appropriate JDBC driver

|NoSQL Appender with MongoDB provider
|MongoDB Java Client driver and Log4j MongoDB library

|NoSQL Appender with Apache CouchDB provider
|LightCouch CouchDB client library and Log4j CouchDB library

|Redis Appender
|https://github.com/xetorthio/jedis[Jedis client]

|Cassandra Appender
|Datastax Cassandra driver and Log4j Cassandra library

|Bzip2, Deflate, Pack200, and XZ compression on rollover
|http://commons.apache.org/proper/commons-compress/[Apache Commons Compress].
In addition, XZ requires http://tukaani.org/xz/java.html[XZ for Java].

|ZeroMQ Appender
|The ZeroMQ appender uses the https://github.com/zeromq/jeromq[JeroMQ] library which is licensed under the terms of the Mozilla Public License Version 2.0 (MPLv2).
For details see the file https://github.com/zeromq/jeromq/blob/master/LICENSE[LICENSE] included with the JeroMQ distribution.
|===

log4j-jcl[[log4j-jcl]]::
The link:log4j-jcl/index.html[Commons Logging Bridge] requires
http://commons.apache.org/proper/commons-logging/[Commons Logging]. See
the link:log4j-jcl/dependencies.html#Dependency_Tree[Dependency Tree]
for the exact list of JAR files needed.

log4j-1.2-api[[log4j-1.2-api]]::
The link:log4j-1.2-api/index.html[Log4j 1.2 Bridge] has no external
dependencies. This only requires the Log4j API and Log4j Core.

log4j-slf4j-impl[[log4j-slf4j-impl]]::
The Log4j 2 link:log4j-slf4j-impl/index.html[SLF4J Binding] depends on
the http://www.slf4j.org/[SLF4J] API. See the
link:log4j-slf4j-impl/dependencies.html#Dependency_Tree[Dependency Tree]
for the exact list of JAR files needed.

WARNING: Do not use this with the link:#log4j-to-slf4j[log4j-to-slf4j] module.

log4j-jul[[log4j-jul]]::
The Log4j 2 link:log4j-jul/index.html[Java Util Logging Adapter] has no
external dependencies. It optionally depends on the
link:log4j-api/index.html[Log4j Core] library. The only required module
is the Log4j API.

log4j-to-slf4j[[log4j-to-slf4j]]::
The link:log4j-to-slf4j/index.html[Log4j 2 to SLF4J Adapter] requires
the http://www.slf4j.org/[SLF4J] API and an SLF4J implementation. See
the link:log4j-to-slf4j/dependencies.html#Dependency_Tree[Dependency
Tree] for the exact list of JAR files needed.

WARNING: Do not use this with the link:#log4j-slf4j-impl[log4j-slf4j-impl] module.

log4j-flume-ng[[log4j-flume-ng]]::
The link:log4j-flume-ng/index.html[Flume Appender] requires
http://flume.apache.org/[Apache Flume] and
http://avro.apache.org/[Apache Avro]. The persistent agent uses Berkeley
DB. See the
link:log4j-flume-ng/dependencies.html#Dependency_Tree[Dependency Tree]
for the exact list of JAR files needed.

log4j-taglib[[log4j-taglib]]::
The Log4j link:log4j-taglib/index.html[Log Tag Library] requires the
http://jakarta.apache.org/taglibs/log/[Jakarta Commons Log Taglib] and
the Servlet API. See the
link:log4j-taglib/dependencies.html#Dependency_Tree[Dependency Tree] for
the exact list of JAR files needed.

log4j-jmx-gui[[log4j-jmx-gui]]::
The Log4j link:log4j-jmx-gui/index.html[JMX GUI] requires the JConsole
jar when run as a JConsole plugin. Otherwise it has no external
dependencies. See the
link:log4j-jmx-gui/dependencies.html#Dependency_Tree[Dependency Tree]
for the exact list of JAR files needed.

log4j-web[[log4j-web]]::
The Log4j link:log4j-web/index.html[Web] module requires the Servlet
API. See the link:log4j-web/dependencies.html#Dependency_Tree[Dependency
Tree] 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.

log4j-couchdb[[log4j-couchdb]]::
The Log4j link:log4j-couchdb/index.html[CouchDB] module depends on the
http://www.lightcouch.org/[LightCouch] CouchDB client library.

log4j-mongodb[[log4j-mongodb]]::
The Log4j link:log4j-mongodb/index.html[MongoDB] module depends on the
http://docs.mongodb.org/ecosystem/drivers/java/[MongoDB Java Client
driver].

log4j-cassandra[[log4j-cassandra]]::
The Log4j link:log4j-cassandra/index.html[Cassandra] module depends on the
http://docs.datastax.com/en/developer/driver-matrix/doc/javaDrivers.html[Datastax
Cassandra driver].

log4j-iostreams[[log4j-iostreams]]::
The Log4j link:log4j-iostreams/index.html[IO Streams] module has no
external dependencies. This only requires the Log4j API.

log4j-api-scala[[log4j-api-scala]]::
The Log4j link:manual/scala-api.html[Scala API] requires Scala runtime
library and reflection in addition to the Log4j API.
