////
    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-cassandra
|org.apache.logging.log4j.cassandra
|Automatic Module

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

|log4j-docker
|org.apache.logging.log4j.docker
|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-mongodb
|org.apache.logging.log4j.mongodb
|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-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. Including Log4j Core provides optional, extra functionality.

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

|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-couchdb[[log4j-couchdb]]
|The Log4j link:log4j-couchdb/index.html[CouchDB] module depends on the
http://www.lightcouch.org/[LightCouch] CouchDB client library.

|log4j-docker
|link:log4j-docker/index.html[Log4j Docker Support] requires
https://github.com/FasterXML/jackson[Jackson annotations, core, and databind]. See the
link:log4j-docker/dependencies.html#Dependency_Tree[Dependency Tree] for the exact list of
JAR files needed.

|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-iostreams[[log4j-iostreams]]
|The Log4j link:log4j-iostreams/index.html[IO Streams] module has no
external dependencies. This only requires the Log4j API.

|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-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-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-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-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-spring-cloud-config-client[[log4j-spring-cloud-config-client]]
|link:log4j-spring-cloud-config/log4j-spring-cloud-config-client/index.html[Log4j Spring Cloud Config Client] requires
https://spring.io/projects/spring-cloud-config[Spring Cloud Config].
https://spring.io/projects/spring-cloud-bus[Spring Cloud Bus] is required if notification of logging
configuration changes is desired. https://spring.io/projects/spring-boot[Spring Boot] is required
but applications do not have to be packaged as a Spring Boot application.
See link:log4j-spring-cloud-config/log4j-spring-cloud-config-client/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-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-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.

|===