第 1 章 使用 Quarkus 配置日志记录
作为应用程序开发人员,您可以使用日志记录来查看和记录应用运行时发生的事件的消息。日志消息提供在开发和测试期间可用于调试应用程序的信息,并在生产环境中监控应用程序。
先决条件
已安装 OpenJDK 11 或 17,并设置
JAVA_HOME环境变量来指定 Java SDK 的位置。- 要下载 Red Hat OpenJDK,请登录到红帽客户门户网站,进入 Software Downloads。
已安装 Apache Maven 3.8.x,其中 x 是 6 或更高版本。
- 从 Apache Maven Project 网站下载 Maven。
您已创建了 Quarkus Maven 项目。
- 有关如何使用 Maven 创建 Quarkus 应用程序的详情,请参阅使用 Apache Maven 开发和编译 Quarkus 应用程序。
1.1. JBoss LogManager 和支持的日志记录框架 复制链接链接已复制到粘贴板!
Quarkus 使用 JBoss LogManager 日志记录后端来收集和管理日志数据。您可以使用 JBoss Logging 收集有关 Quarkus 内部事件的数据,以及应用程序中的事件。您可以在 application.properties 文件中配置日志行为。
除 JBoss Logging 外,JBoss LogManager 还支持几个第三方日志记录 API。JBoss LogManager 合并了所有支持的日志记录 API 的日志。
用于日志的支持的 API:
Quarkus 使用 JBoss Logging 处理其所有日志记录功能。当您使用依赖于不同日志记录 API 的库时,您需要将这个库从依赖项中排除,并将 JBoss Logging 配置为使用第三方 API 的日志记录适配器。
1.1.1. 添加 Apache Log4j 日志记录框架 复制链接链接已复制到粘贴板!
Apache Log4j 是一个日志记录框架,其中包括日志记录后端和日志记录 API。由于 Quarkus 使用 JBoss LogManager 后端,您可以将 log4j2-jboss-logmanager 库添加到项目中,并使用 Log4j 作为日志记录 API。添加 Log4j 库会将 Log4j 日志路由到 JBoss Log Manager。您不需要包含任何 Log4j 依赖项。
流程
将
log4j2-jboss-logmanager库作为依赖项添加到项目的pom.xml文件中:pom.xml文件示例<dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j2-jboss-logmanager</artifactId> </dependency><dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j2-jboss-logmanager</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow log4j2-jboss-logmanager是 Log4J 版本 2 API 的库。如果要使用旧的 Log4J 版本 1 API,您必须改为添加log4j-jboss-logmanager。
1.1.2. 使用日志记录适配器 复制链接链接已复制到粘贴板!
Quarkus 依赖于 JBoss Logging 库来满足所有日志记录要求。
当使用对其他日志记录库(如 Apache Commons Logging、Log4j 或 SLF4j)的库时,您必须从依赖项中排除这些日志记录库,并使用 JBoss Logging 提供的其中一个适配器。您不需要为作为 Quarkus 扩展依赖项的库添加适配器。
第三方日志记录实现不包括在原生可执行文件中,您的应用程序可能无法编译,并显示类似如下的错误消息:
Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
您可以通过为您使用的第三方日志记录实施配置 JBoss Logging 适配器来防止这个错误。
流程
根据您使用的日志记录库,将其中一个适配器添加到
pom.xml文件中:Apache Commons Logging:
pom.xml文件示例<dependency> <groupId>org.jboss.logging</groupId> <artifactId>commons-logging-jboss-logging</artifactId> </dependency><dependency> <groupId>org.jboss.logging</groupId> <artifactId>commons-logging-jboss-logging</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Log4j:
pom.xml文件示例<dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j-jboss-logmanager</artifactId> </dependency><dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j-jboss-logmanager</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Log4j2:
pom.xml文件示例<dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j2-jboss-logmanager</artifactId> </dependency><dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j2-jboss-logmanager</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow SLF4j:
pom.xml文件示例<dependency> <groupId>org.jboss.slf4j</groupId> <artifactId>slf4j-jboss-logmanager</artifactId> </dependency><dependency> <groupId>org.jboss.slf4j</groupId> <artifactId>slf4j-jboss-logmanager</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow