Maven、Ivy、Gradle 和 SBT 构件
Log4j 2 被拆分为 API 和实现(核心),其中 API 提供了应用程序应该编码的接口。严格来说,Log4j 核心仅在运行时需要,而不需要在编译时。
但是,在下面我们列出了 Log4j 核心作为编译时依赖项,以提高 自定义插件 的启动时间,因为它提供了一个注释处理器,该处理器会生成一个元数据文件来缓存插件信息以及编译时所需的代码以创建自定义插件。
在 Apache Maven 构建中使用 Log4j
要使用 Apache Maven 构建,请将下面列出的依赖项添加到您的 pom.xml
文件中。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.23.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
在 Apache Ivy 构建中使用 Log4j
要使用 Apache Ivy 构建,请将下面列出的依赖项添加到您的 ivy.xml
文件中。
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-api" rev="2.23.1" />
<dependency org="org.apache.logging.log4j" name="log4j-core" rev="2.23.1" />
</dependencies>
在 Gradle 构建中使用 Log4j
要使用 Gradle 构建,请将下面列出的依赖项添加到您的 build.gradle
文件中。
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-api:2.23.1'
implementation 'org.apache.logging.log4j:log4j-core:2.23.1'
}
在 SBT 构建中使用 Log4j
要使用 SBT 构建,请将下面列出的依赖项添加到您的 build.sbt
文件中。
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-api" % "2.23.1"
libraryDependencies += "org.apache.logging.log4j" % "log4j-core" % "2.23.1"
Maven 物料清单 (BOM)
为了保持您的 Log4j 模块版本一致,我们为您提供了一个 Maven 物料清单 (BOM) POM。
要将此与 Maven 一起使用,请将下面列出的依赖项添加到您的 pom.xml
文件中。请注意 <dependencyManagement>
嵌套和 <scope>import</scope>
指令。这将导入与关联的 Log4j 版本捆绑在一起的所有模块到您的 dependencyManagement
中。因此,在使用 <dependency>
元素添加导入的模块(log4j-api
、log4j-core
等)时,您无需指定其版本。
pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.23.1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
Gradle 5.0+ 支持将 Maven BOM 导入为 平台 以对齐依赖项版本。
build.gradle
dependencies {
implementation platform('org.apache.logging.log4j:log4j-bom:2.23.1')
implementation 'org.apache.logging.log4j:log4j-api'
runtimeOnly 'org.apache.logging.log4j:log4j-core'
// etc.
}
要将此与 Gradle 2.8-4.10 一起使用,需要一个额外的 Gradle 插件 来实现依赖项管理功能。
build.gradle
plugins {
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
dependencyManagement {
imports {
mavenBom 'org.apache.logging.log4j:log4j-bom:2.23.1'
}
}
dependencies {
// For Gradle 2.8-3.3 use compile/runtime instead of implementation/runtimeOnly
implementation 'org.apache.logging.log4j:log4j-api'
runtimeOnly 'org.apache.logging.log4j:log4j-core'
// etc.
}
CycloneDX 软件物料清单 (SBOM)
从版本 2.22.0
开始,Log4j 与每个部署的构件一起分发 CycloneDX 软件物料清单 (SBOM)。这由 logging-parent
简化,有关详细信息,请参阅 其网站。
可选组件
Log4j 2.x 包含几个可选组件,可以包含在应用程序中。
Log4j 1.x API 桥接
如果现有组件使用 Log4j 1.x,并且您希望将此日志记录路由到 Log4j 2,则删除所有 log4j 1.x 依赖项并添加以下内容。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-1.2-api" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-1.2-api:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-1.2-api" % "2.23.1"
Apache Commons Logging 桥接
如果现有组件使用 Apache Commons Logging 1.x,并且您希望将此日志记录路由到 Log4j 2,则添加以下内容,但不要删除任何 Commons Logging 1.x 依赖项。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-jcl" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-jcl:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-jcl" % "2.23.1"
SLF4J 桥接
如果现有组件使用 SLF4J,并且您希望将此日志记录路由到 Log4j 2,则添加以下内容,但不要删除任何 SLF4J 依赖项。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-slf4j-impl" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.23.1"
JUL 适配器
如果现有组件使用 Java Util Logging,并且您希望将此日志记录路由到 Log4j 2,则添加以下内容。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-jul" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-jul:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-jul" % "2.23.1"
Web Servlet 支持
为了正确支持和处理 Web 应用程序的类加载器环境和容器生命周期,需要一个额外的模块。此模块仅在运行时需要。此外,如果您在 OSGi 环境中使用 servlet,请确保您的首选 servlet API 版本已可用(例如,如果您想使用 3.0,但您也加载了 2.5,请确保两者都已加载)。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-web" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-web:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-web" % "2.23.1"
标签库
Log4j 日志标签库创建了在 JSP 中插入日志语句的能力,而无需使用 Java 脚本。它使用标准 Log4j 2 API 根据您的 Log4j 配置记录消息。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-taglib</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-taglib" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-taglib:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-taglib" % "2.23.1"
Apache Flume 追加器
Flume 追加器允许应用程序将事件发送到 Flume 代理。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-flume-ng</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-flume-ng" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-flume-ng:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-flume-ng" % "2.23.1"
Log4j 到 SLF4J 适配器
Log4j 2 到 SLF4J 适配器允许将编码到 Log4j 2 API 的应用程序路由到 SLF4J。使用此适配器可能会导致一些性能损失,因为 Log4j 2 消息必须在传递到 SLF4J 之前进行格式化。当此适配器在使用时,SLF4J 桥接器不能在类路径中。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-to-slf4j" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-to-slf4j" % "2.23.1"
CouchDB
如果您的配置使用 NoSQL CouchDB 追加器,则添加以下内容。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-couchdb</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-couchdb" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-couchdb:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-couchdb" % "2.23.1"
MongoDB
如果您的配置使用 NoSQL MongoDB 追加器,则添加以下内容。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-mongodb</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-mongodb" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-mongodb:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-mongodb" % "2.23.1"
Cassandra
如果您的配置使用 Cassandra 追加器,则添加以下内容。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-cassandra</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-cassandra" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-cassandra:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-cassandra" % "2.23.1"
IO 流
Log4j IO 流允许应用程序将写入 OutputStream 或 Writer 的数据重定向到记录器,或将从 InputStream 或 Reader 读取的数据由记录器窃听。要使用 IO 流,请添加以下内容。
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-iostreams</artifactId>
<version>2.23.1</version>
</dependency>
</dependencies>
ivy.xml
<dependencies>
<dependency org="org.apache.logging.log4j" name="log4j-iostreams" rev="2.23.1" />
</dependencies>
build.gradle
dependencies {
implementation 'org.apache.logging.log4j:log4j-iostreams:2.23.1'
}
build.sbt
libraryDependencies += "org.apache.logging.log4j" % "log4j-iostreams" % "2.23.1"
快照构建
您可以通过使用 Maven 仓库 https://repository.apache.org/snapshots
和当前 SNAPSHOT 版本来访问最新的开发快照。通常,main
分支将使用下一个补丁版本作为其快照版本,无论 Log4j 的下一个实际版本是什么。例如,如果最新版本是 2.0
,则 main
将使用版本 2.0.1-SNAPSHOT
。请始终使用 源代码仓库页面 中所述的 main
分支中的 pom.xml
进行验证。
Maven
Maven 用户可以在其 pom.xml
中添加以下内容以启用快照
<repositories>
<repository>
<id>apache.snapshots</id>
<name>Apache Snapshot Repository</name>
<url>https://repository.apache.org/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
Gradle
Gradle 用户可以在其 build.gradle
中添加以下内容以启用快照
repositories {
mavenCentral()
maven { url 'https://repository.apache.org/snapshots' }
}
SBT
SBT 用户可以在其 build.sbt
中添加以下内容以启用快照
resolvers += "Apache Snapshot Repository" at "https://repository.apache.org/snapshots"