Log4j 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 named Java module (with a module-info.java). Since version 2.21.0 all the remaining artifacts are named modules. The characteristics of the modules are:

Artifact Name Module Name Module Characteristics
log4j-api org.apache.logging.log4j
Module Directive Notes
exports org.apache.logging.log4j
exports org.apache.logging.log4j.message
exports org.apache.logging.log4j.simple
exports org.apache.logging.log4j.spi
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-appserver org.apache.logging.log4j.appserver Named Module
log4j-cassandra org.apache.logging.log4j.cassandra Named Module
log4j-core org.apache.logging.log4j.core Named Module. Most of its dependencies are optional.
log4j-couchdb org.apache.logging.log4j.couchdb Named Module
log4j-docker org.apache.logging.log4j.docker Named Module
log4j-1.2-api org.apache.log4j Named Module
log4j-flume-ng org.apache.logging.log4j.flume Named Module
log4j-iostreams org.apache.logging.log4j.iostreams Named Module
log4j-jakarta-smtp org.apache.logging.log4j.smtp Named Module
log4j-jakarta-web org.apache.logging.log4j.web Named Module. Uses the same name as log4j-web since it is its Jakarta EE 9 equivalent.
log4j-jcl org.apache.logging.log4j.jcl Named Module
log4j-jul org.apache.logging.log4j.jul Named Module
log4j-mongodb org.apache.logging.log4j.mongodb Named Module
log4j-slf4j-impl org.apache.logging.log4j.slf4j.impl Named Module
log4j-slf4j2-impl org.apache.logging.log4j.slf4j2.impl Named Module
log4j-taglib org.apache.logging.log4j.taglib Named Module
log4j-to-slf4j org.apache.logging.log4j.to.slf4j Named Module
log4j-web org.apache.logging.log4j.web Named Module. Uses the same name as log4j-jakarta-web since it is its Java EE 8 equivalent.

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

The Log4J API module has no external dependencies.

log4j-core

The Log4J Implementation has several optional dependencies. See the Dependency Tree for the exact list of JAR files needed for these features.

Optional Dependencies per Feature in Log4J Implementation
Feature Requirements
XML configuration -
Properties configuration -
JSON configuration Jackson core and databind
YAML configuration Jackson databind and YAML data format
CSV Layout Apache Commons CSV
JSON Layout Jackson core and databind
XML Layout Jackson core, databind and dataformat XML
And com.fasterxml.woodstox:woodstox-core:5.0.2
YAML Layout Jackson core, databind and YAML data format
Async Loggers LMAX Disruptor
Kafka Appender Kafka client library. Note that 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 Apache ActiveMQ
Windows console color support 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
Cassandra Appender Datastax Cassandra driver and Log4j Cassandra library
Bzip2, Deflate, Pack200, and XZ compression on rollover Apache Commons Compress. In addition:
ZeroMQ Appender The ZeroMQ appender uses the JeroMQ library which is licensed under the terms of the Mozilla Public License Version 2.0 (MPLv2). For details see the file LICENSE included with the JeroMQ distribution.

log4j-docker

Log4j Docker Support requires Jackson annotations, core, and databind. See the Dependency Tree for the exact list of JAR files needed.

log4j-jcl

The Commons Logging Bridge requires Commons Logging. See the Dependency Tree for the exact list of JAR files needed.

log4j-1.2-api

The Log4j 1.2 Bridge has no external dependencies. This only requires the Log4j API. Including Log4j Core provides optional, extra functionality.

log4j-slf4j-impl

The Log4j 2 SLF4J Binding depends on the SLF4J API. See the Dependency Tree for the exact list of JAR files needed.

Do not use this with the log4j-to-slf4j module.

log4j-jul

The Log4j 2 Java Util Logging Adapter has no external dependencies. It optionally depends on the Log4j Core library. The only required module is the Log4j API.

log4j-to-slf4j

The Log4j 2 to SLF4J Adapter requires the SLF4J API and an SLF4J implementation. See the Dependency Tree for the exact list of JAR files needed.

Do not use this with the log4j-slf4j-impl module.

log4j-flume-ng

The Flume Appender requires Apache Flume and Apache Avro. The persistent agent uses Berkeley DB. See the Dependency Tree for the exact list of JAR files needed.

log4j-spring-cloud-config-client

Log4j Spring Cloud Config Client requires Spring Cloud Config. Spring Cloud Bus is required if notification of logging configuration changes is desired. Spring Boot is required but applications do not have to be packaged as a Spring Boot application. Dependency Tree for the exact list of JAR files needed.

log4j-taglib

The Log4j Log Tag Library requires the Jakarta Commons Log Taglib and the Servlet API. See the Dependency Tree for the exact list of JAR files needed.

log4j-web

The Log4j Web module requires the Servlet API. See the 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

The Log4J CouchDB module depends on the LightCouch CouchDB client library.

log4j-mongodb

The Log4J MongoDB module depends on the MongoDB Java Client driver.

log4j-cassandra

The Log4J Cassandra module depends on the Datastax Cassandra driver.

log4j-iostreams

The Log4j IO Streams module has no external dependencies. This only requires the Log4j API.

log4j-jakarta-smtp

The Log4j Simple Mail Transfer Protocol (SMTP) Appender, version for Jakarta EE 9 module has 2 external runtime dependencies for the jakarta.activation-api and jakarta.mail-api. 1. org.eclipse.angus:angus-activation 2. org.eclipse.angus:jakarta.mail

log4j-jakarta-web

The Log4j Jakarta-Web module for Jakarta EE 9+ web servlet containers requires the Servlet API and log4j-core.