日志记录配置
第 1 章 日志记录配置 复制链接链接已复制到粘贴板!
阅读红帽构建的 Quarkus 中使用日志 API,配置日志输出,并使用日志记录适配器来统一来自其他日志记录 API 的输出。
本文档是 Observability 参考指南 的一部分,它包括了这个和其他与可观察性相关的组件。
Quarkus 使用 JBoss Log Manager 日志记录后端来发布应用程序和框架日志。Quarkus 支持 JBoss Logging API 和多个其他日志记录 API,可与 JBoss Log Manager 无缝集成。您可以使用以下 API 中的任何一个 :
1.1. 使用 JBoss Logging 进行应用程序日志记录 复制链接链接已复制到粘贴板!
使用 JBoss Logging API 时,应用程序不需要额外的依赖项,因为红帽构建的 Quarkus 会自动提供它。
使用 JBoss Logging API 记录消息的示例:
虽然 JBoss Logging 将日志信息直接路由到 JBoss Log Manager,但您的其中一个库可能依赖于不同的日志记录 API。在这种情况下,您需要使用 日志适配器 来确保其日志消息也路由到 JBoss Log Manager。
1.2. 获取应用程序日志记录器 复制链接链接已复制到粘贴板!
要获取红帽构建的 Quarkus 中的应用程序日志记录器,请选择以下方法之一:
1.2.1. 声明 logger 字段 复制链接链接已复制到粘贴板!
使用这个经典方法,您可以使用特定的 API 获取日志记录器实例,将其存储在类的静态字段中,并在此实例上调用日志操作。
相同的流可以与任何 支持的日志记录 API 应用。
使用 JBoss Logging API 将日志记录器实例存储在静态字段中的示例:
1.2.2. 简化的日志记录 复制链接链接已复制到粘贴板!
Quarkus 简化了日志记录功能,方法是将日志记录器字段添加到使用 io.quarkus.logging.Log 的类中。这消除了重复样板代码的需求,并增强了日志记录设置便利。
使用静态方法调用简化日志的示例:
仅在应用程序类中使用 Log API,而不是在外部依赖项中使用。在 构建时未由 Quarkus 处理的日志方法调用将导致异常。
在扩展中使用 io.quarkus.logging.Log :
虽然 Log API 简化了应用程序类的日志记录,但不建议在扩展模块或外部依赖项中使用。
请考虑以下事项:
-
io.quarkus.logging.Log依赖于构建时发生的 Quarkus 字节代码转换。 在扩展模块中,只有在模块包含 Jandex 索引时,
日志才能正常工作。但是,此行为不受支持,可能会导致不可靠的日志记录。对于扩展开发,请使用
org.jboss.logging.Logger.getLogger (String)而不是io.quarkus.logging.Log。
1.2.3. 注入配置的日志记录器 复制链接链接已复制到粘贴板!
使用 @Inject 注释配置的 org.jboss.logging.Logger 日志记录器实例的注入是添加应用程序日志记录器的替代选择,但仅适用于 CDI Bean。
您可以使用 @Inject Logger 日志,其中日志记录器按照您注入的类命名,或者 @LoggerName ("…") Logger 日志,其中日志记录器接收指定的名称。
如果您已使用 注解了 Logger,则不需要 @inject。
@ Logger Name ("…")
注入后,您可以使用 log 对象来调用日志记录方法。
两种不同类型的日志记录器注入示例:
日志记录器实例在内部缓存。因此,当将日志记录器注入 @RequestScoped bean 时,它对所有 bean 实例共享,以避免与日志记录器实例化关联的性能损失。
1.3. 使用日志级别 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 提供了不同的日志级别,可帮助开发人员控制根据事件严重性记录的信息量。
表 1.1. 可用的日志级别:
| OFF | 配置用于关闭日志记录的特殊级别。 |
| FATAL | 关键服务故障或无法处理任何请求。 |
| ERROR | 处理或无法完成请求的主要问题。 |
| WARN | 一个不需要立即更正的非关键服务错误或问题。 |
| INFO | 服务生命周期事件或其他重要不常的信息。 |
| DEBUG | 有关生命周期事件或未与特定请求关联的事件的附加信息,可用于调试。 |
| TRACE | 根据请求的调试信息详细,可能会非常高。 |
| ALL | 一个特殊的级别,用于为所有消息打开日志记录,包括自定义级别。 |
您还可以为使用 java.util.logging 的应用程序和库配置以下级别:
| 严重 | 与 ERROR 相同。 |
| WARNING | 与 WARN 相同。 |
| CONFIG | 服务配置信息。 |
| 正常的 | 与 DEBUG 相同。 |
| FINER | 与 TRACE 相同。 |
| FINEST |
与 |
| 数字级别值 | 标准级别名称 | 等效的 java.util.logging (JUL)级别名称 |
|---|---|---|
| 1100 | FATAL | Not applicable |
| 1000 | ERROR | 严重 |
| 900 | WARN | WARNING |
| 800 | INFO | INFO |
| 700 | Not applicable | CONFIG |
| 500 | DEBUG | 正常的 |
| 400 | TRACE | FINER |
| 300 | Not applicable | FINEST |
1.4. 配置日志级别、类别和格式 复制链接链接已复制到粘贴板!
JBoss Logging 集成到红帽构建的 Quarkus 中,通过设置所有可用扩展的单一配置文件为 所有支持的日志记录 API 提供统一配置。要调整运行时日志记录,请修改 application.properties 文件。
有关如何将默认日志级别设置为 INFO 日志记录并包含 Hibernate DEBUG 日志的示例:
quarkus.log.level=INFO quarkus.log.category."org.hibernate".level=DEBUG
quarkus.log.level=INFO
quarkus.log.category."org.hibernate".level=DEBUG
等同于 YAML (包括 Quarkus YAML 扩展 )将是:
将日志级别设置为 DEBUG 以下时,还必须调整最小日志级别。此设置可以通过 quarkus.log.min-level 配置属性或每个类别进行全局应用:
quarkus.log.category."org.hibernate".min-level=TRACE
quarkus.log.category."org.hibernate".min-level=TRACE
这会设置一个 floor 级别,用于 Quarkus 需要生成支持代码。构建时必须设置最小日志级别,以便 Quarkus 能够打开导致在不可用级别登录时优化机会。
来自原生执行的示例:
将 INFO 设置为最小日志级别会将较低级别检查(如 isTraceEnabled )设置为 false。这标识了像 if (logger.isDebug ())callMethod () 等代码,它将永远不会执行,并将其标记为"dead"。
如果您在命令行中添加这些属性,请确保 " 字符被正确转义:
-Dquarkus.log.category.\"org.hibernate\".level=TRACE
-Dquarkus.log.category.\"org.hibernate\".level=TRACE
所有潜在的属性都列在 日志记录配置参考 部分中。
1.4.1. 日志记录类别 复制链接链接已复制到粘贴板!
日志记录会根据每个类别配置,每个类别都独立配置。对一个类别的配置将递归应用到所有子类别,除非有更具体的子类别配置。
所有日志记录类别的父级称为"root 类别"。作为最终父级,此类别可能包含针对所有其他类别的全局配置。这包括全局配置的处理程序和格式器。
例 1.1. 适用于所有类别的全局配置示例:
quarkus.log.handlers=con,mylog quarkus.log.handler.console.con.enable=true quarkus.log.handler.file.mylog.enable=true
quarkus.log.handlers=con,mylog
quarkus.log.handler.console.con.enable=true
quarkus.log.handler.file.mylog.enable=true
在本例中,根类别配置为使用两个命名的处理程序: con 和 mylog。
例 1.2. 每个类别配置示例:
quarkus.log.category."org.apache.kafka.clients".level=INFO quarkus.log.category."org.apache.kafka.common.utils".level=INFO
quarkus.log.category."org.apache.kafka.clients".level=INFO
quarkus.log.category."org.apache.kafka.common.utils".level=INFO
本例演示了如何在类别 org.apache.kafka.clients 和 org.apache.kafka.common.utils 中配置最小日志级别。
如需更多信息,请参阅 日志记录配置参考。
如果要为特定类别配置额外的内容,请创建一个名为 handler,如 quarkus.log.handler.[console|file|syslog].<your-handler-name> unset,并使用 quarkus.log.category.<my-category>.handlers 进行设置。
用例示例可能需要为日志消息使用不同的时间戳格式,这些消息被保存到一个文件,而不是用于其他处理程序的格式。
有关更多演示,请参阅 将指定 处理程序的输出附加到类别 示例。
| 属性名称 | default | 描述 |
|---|---|---|
|
|
|
用于配置名为 < |
|
|
|
用于配置名为 < |
|
|
| 指定此日志记录器是否应该将其输出发送到其父日志记录器。 |
|
|
| 要附加到特定类别的处理程序的名称。 |
[a]
有些扩展可能会为某些类别定义自定义的默认日志级别,以默认减少日志通知。在配置中设置日志级别将覆盖任何扩展定义的日志级别。
[b]
默认情况下,配置的类别获得与根日志记录器上连接的相同处理程序。
| ||
. 符号分隔配置属性中的特定部分。属性名称中的 quotes 用作保留类别规格所需的转义,如 quarkus.log.category."io.quarkus.smallrye.jwt".level=TRACE, 完整。
1.4.2. 根日志记录器配置 复制链接链接已复制到粘贴板!
根日志记录器类别单独处理,并使用以下属性进行配置:
| 属性名称 | default | 描述 |
|---|---|---|
|
|
| 每个日志类别的默认日志级别。 |
|
|
| 每个日志类别的默认最小日志级别。 |
- 如果给定日志记录器类别没有级别配置,则会检查父类别。
- 如果没有为类别和任何父类别提供特定配置,则使用根日志记录器配置。
虽然根日志记录器的处理程序通常通过 quarkus.log.console、quarkus.log.file 和 quarkus.log.syslog 直接配置,但它可以使用 quarkus.log.handlers 属性为其附加额外的命名处理程序。
1.5. 日志记录格式 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 使用基于模式的日志格式程序,默认生成人类可读的文本日志,但您也可以使用 dedicated 属性为每个日志处理程序配置格式。
对于 console 处理程序,属性为 quarkus.log.console.format。
日志记录格式字符串支持以下符号:
| 符号 | Summary | 描述 |
|---|---|---|
|
|
|
呈现简单的 |
|
| 类别 | 呈现类别名称。 |
|
| 源类 | 呈现源类名称。[a] |
|
| Date |
使用给定日期格式字符串呈现日期,它使用 |
|
| 例外 | 呈现抛出的异常(若有)。 |
|
| 源文件 | 呈现源文件名。[a] |
|
| 主机名 | 呈现系统简单主机名。 |
|
| 限定主机名 | 呈现系统的完全限定主机名,这可能与简单的主机名相同,具体取决于操作系统配置。 |
|
| 进程 ID | 呈现当前进程 PID。 |
|
| 源位置 | 呈现源位置信息,其中包括源文件名、行号、类名称和方法名称。[a] |
|
| 源行 | 呈现源行号。[a] |
|
| 完整消息 | 呈现日志消息加上异常(如果有)。 |
|
| 源方法 | 呈现源方法名称。[a] |
|
| 换行符 | 呈现特定于平台的行分隔符字符串。 |
|
| 进程名称 | 呈现当前进程的名称。 |
|
| 级别 | 呈现消息的日志级别。 |
|
| 相对时间 | 从应用程序日志开始后,呈现时间(毫秒)。 |
|
| 简单消息 | 仅呈现日志消息,没有异常追踪。 |
|
| 线程名称 | 呈现线程名称。 |
|
| 线程 ID | 呈现线程 ID。 |
|
| 时区 |
将输出的时区设置为 < |
|
| 映射的诊断上下文值 | 呈现映射诊断上下文中的值。 |
|
| 映射的诊断上下文值 |
以 |
|
| 嵌套诊断上下文值 |
以 |
[a]
格式检查调用者信息可能会影响性能的序列
| ||
1.5.1. 其他控制台日志记录格式 复制链接链接已复制到粘贴板!
更改控制台日志格式很有用,例如,当处理并存储日志信息的服务捕获 Quarkus 应用程序的控制台输出时。
1.5.1.1. JSON 日志记录格式 复制链接链接已复制到粘贴板!
quarkus-logging-json 扩展可能会用于添加对 JSON 日志记录格式及其相关配置的支持。
在构建文件中添加此扩展,如下所示:
使用 Maven:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-logging-json</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-logging-json</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Gradle:
implementation("io.quarkus:quarkus-logging-json")implementation("io.quarkus:quarkus-logging-json")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,此扩展存在替换了控制台配置中的输出格式配置,格式字符串和颜色设置(若有)将被忽略。将继续应用其他控制台配置项,包括控制异步日志记录和日志级别等。
在某些情况下,最好在 dev 模式中使用人类可读的(未结构化)登录,在生产环境模式中使用 JSON 日志记录(结构化)。这可以通过使用不同的配置文件来实现,如以下配置中所示。
在 application.properties 中为 dev 和 test 模式禁用 JSON 日志记录:
%dev.quarkus.log.console.json.enabled=false %test.quarkus.log.console.json.enabled=false
%dev.quarkus.log.console.json.enabled=false %test.quarkus.log.console.json.enabled=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.5.1.1.1. 配置 复制链接链接已复制到粘贴板!
使用支持的属性配置 JSON 日志记录扩展,以自定义其行为。
build 时修复的 :在构建时修复的配置属性 - 所有其他配置属性在运行时可覆盖
| 配置属性 | Type | default |
| Type | default | |
|
确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。
环境变量: | 布尔值 | |
|
启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。
环境变量: | 布尔值 |
|
|
要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。
环境变量: | string |
|
|
要使用的特殊记录分隔符。默认情况下使用 newline。
环境变量: | string | |
|
要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。
环境变量: | string |
|
|
要指定的异常输出类型。
环境变量: |
|
|
|
在日志中可以打印更多详细信息。 打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。
环境变量: | 布尔值 |
|
|
使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。
环境变量: | string | |
|
在 JSON 输出中排除的键。
环境变量: | 字符串列表 | |
|
其他字段值。
环境变量: | string | 所需的 HEKETI Required |
|
其他字段类型规格。支持的类型:
环境变量: |
|
|
|
指定生成的 JSON 的格式
环境变量: |
|
|
| Type | default | |
|
确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。
环境变量: | 布尔值 | |
|
启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。
环境变量: | 布尔值 |
|
|
要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。
环境变量: | string |
|
|
要使用的特殊记录分隔符。默认情况下使用 newline。
环境变量: | string | |
|
要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。
环境变量: | string |
|
|
要指定的异常输出类型。
环境变量: |
|
|
|
在日志中可以打印更多详细信息。 打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。
环境变量: | 布尔值 |
|
|
使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。
环境变量: | string | |
|
在 JSON 输出中排除的键。
环境变量: | 字符串列表 | |
|
其他字段值。
环境变量: | string | 所需的 HEKETI Required |
|
其他字段类型规格。支持的类型:
环境变量 : |
|
|
|
指定生成的 JSON 的格式
环境变量: |
|
|
| Type | default | |
|
确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。
环境变量: | 布尔值 | |
|
启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。
环境变量: | 布尔值 |
|
|
要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。
环境变量: | string |
|
|
要使用的特殊记录分隔符。默认情况下使用 newline。
环境变量: | string | |
|
要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。
环境变量: | string |
|
|
要指定的异常输出类型。
环境变量: |
|
|
|
在日志中可以打印更多详细信息。 打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。
环境变量: | 布尔值 |
|
|
使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。
环境变量: | string | |
|
在 JSON 输出中排除的键。
环境变量: | 字符串列表 | |
|
其他字段值。
环境变量: | string | 所需的 HEKETI Required |
|
其他字段类型规格。支持的类型:
环境变量: |
|
|
|
指定生成的 JSON 的格式
环境变量: |
|
|
| Type | default | |
|
确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。
环境变量: | 布尔值 | |
|
启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。
环境变量: | 布尔值 |
|
|
要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。
环境变量: | string |
|
|
要使用的特殊记录分隔符。默认情况下使用 newline。
环境变量: | string | |
|
要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。
环境变量: | string |
|
|
要指定的异常输出类型。
环境变量: |
|
|
|
在日志中可以打印更多详细信息。 打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。
环境变量: | 布尔值 |
|
|
使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。
环境变量: | string | |
|
在 JSON 输出中排除的键。
环境变量: | 字符串列表 | |
|
其他字段值。
环境变量: | string | 所需的 HEKETI Required |
|
其他字段类型规格。支持的类型:
环境变量: |
|
|
|
指定生成的 JSON 的格式
环境变量: |
|
|
启用用户进行打印可能会导致某些处理器和 JSON 解析器失败。
打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。
1.6. 日志处理程序 复制链接链接已复制到粘贴板!
日志处理程序是一个日志组件,负责将日志事件提交到接收者。红帽构建的 Quarkus 包括几个不同的日志处理程序: console、file 和 syslog。
功能示例使用 com.example 作为日志记录类别。
1.6.1. 控制台日志处理程序 复制链接链接已复制到粘贴板!
控制台日志处理程序默认启用,它会将所有日志事件定向到应用的控制台,通常是系统的 stdout。
全局配置示例:
quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%nquarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%nCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每个类别配置示例:
quarkus.log.handler.console.my-console-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n quarkus.log.category."com.example".handlers=my-console-handler quarkus.log.category."com.example".use-parent-handlers=falsequarkus.log.handler.console.my-console-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n quarkus.log.category."com.example".handlers=my-console-handler quarkus.log.category."com.example".use-parent-handlers=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow
有关其配置的详情,请查看 控制台日志记录配置 参考。
1.6.2. 文件日志处理程序 复制链接链接已复制到粘贴板!
要将事件记录到应用程序主机上的文件中,请使用 Quarkus 文件日志处理程序。文件日志处理程序默认为禁用,因此您必须首先启用它。
Quarkus 文件日志处理程序支持日志文件轮转。
日志文件轮转通过保留指定数量的备份文件来确保有效的日志管理,同时保持主日志文件更新,并以可管理的大小保持更新。
全局配置示例:
quarkus.log.file.enable=true quarkus.log.file.path=application.log quarkus.log.file.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%nquarkus.log.file.enable=true quarkus.log.file.path=application.log quarkus.log.file.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%nCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每个类别配置示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关其配置的详情,请查看 文件日志记录配置 参考。
1.6.3. syslog log handler 复制链接链接已复制到粘贴板!
Quarkus 中的 syslog 处理程序遵循 Syslog 协议,该协议用于在类似 UNIX 的系统上发送日志消息。它使用 RFC 5424 中定义的协议。
默认情况下禁用 syslog 处理程序。启用后,它会将所有日志事件发送到 syslog 服务器,通常是应用程序的本地 syslog 服务器。
全局配置示例:
quarkus.log.syslog.enable=true quarkus.log.syslog.app-name=my-application quarkus.log.syslog.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%nquarkus.log.syslog.enable=true quarkus.log.syslog.app-name=my-application quarkus.log.syslog.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%nCopy to Clipboard Copied! Toggle word wrap Toggle overflow 每个类别配置示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关其配置的详情,请查看 Syslog 日志记录配置 参考。
1.6.4. 套接字日志处理程序 复制链接链接已复制到粘贴板!
此处理程序将日志发送到套接字。套接字日志处理程序默认为禁用;使其能够使用它。启用后,它会将所有日志事件发送到套接字,如 Logstash 服务器。
全局配置示例:
quarkus.log.socket.enable=true quarkus.log.socket.endpoint=localhost:4560
quarkus.log.socket.enable=true quarkus.log.socket.endpoint=localhost:4560Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通常,此处理程序与 quarkus-logging-json 扩展一起使用,将 ECS 格式的日志发送到 Elasticsearch 实例。有关示例配置,请参阅 集中日志管理指南。
1.7. 在您的日志处理程序中添加日志记录过滤器 复制链接链接已复制到粘贴板!
日志处理程序(如控制台日志处理程序)可以与决定是否应记录日志 的过滤器 相关联。
注册日志记录过滤器:
注解一个
最终类,它使用@io.quarkus.logging.LoggingFilter实现java.util.logging.Filter,并设置name属性:编写过滤器的示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,我们将包含控制台日志中特定文本的日志记录中排除。要过滤 的特定文本不是硬编码的,而是从
my-filter.part配置属性中读取。在
application.properties中配置过滤器的示例:my-filter.part=TEST
my-filter.part=TESTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用位于
application.properties中的过滤器配置属性将过滤器附加到对应的处理程序:quarkus.log.console.filter=my-filter
quarkus.log.console.filter=my-filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.8. 日志记录配置示例 复制链接链接已复制到粘贴板!
以下示例演示了您可以在 Red Hat build of Quarkus 中配置日志记录的一些方法:
除 Quarkus 日志(INFO)外的控制台 DEBUG 日志记录,无颜色、缩短时间、缩短类别前缀
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
quarkus.log.console.level=DEBUG
quarkus.console.color=false
quarkus.log.category."io.quarkus".level=INFO
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
quarkus.log.console.level=DEBUG
quarkus.console.color=false
quarkus.log.category."io.quarkus".level=INFO
如果您在命令行中添加这些属性,请确保 " 被转义。例如,-Dquarkus.log.category.\"io.quarkus\".level=DEBUG。
文件 TRACE 日志配置
由于我们不会更改根日志记录器,控制台日志仅包含 INFO 或更高级别的日志。
附加到类别的命名处理程序
附加到根日志记录器的命名处理程序
configure a named file handler that sends the output to 'quarkus.log' attach the handler to the root logger
# configure a named file handler that sends the output to 'quarkus.log'
quarkus.log.handler.file.CONSOLE_MIRROR.enable=true
quarkus.log.handler.file.CONSOLE_MIRROR.path=quarkus.log
# attach the handler to the root logger
quarkus.log.handlers=CONSOLE_MIRROR
1.9. 集中式日志管理 复制链接链接已复制到粘贴板!
使用集中式位置,有效收集、存储和分析来自不同组件和实例的日志数据。
要将日志发送到中央化的工具,如 Graylog、Logstash 或 Fluentd,请参阅 Quarkus 集中式日志 管理指南。
1.9.1. OpenTelemetry 日志记录 复制链接链接已复制到粘贴板!
您可以启用从所有附加器向 OpenTelemetry Logging 发送日志条目。
详情请参阅 Quarkus OpenTelemetry Logging 指南。
1.10. 为 @QuarkusTest配置日志记录 复制链接链接已复制到粘贴板!
通过将 java.util.logging.manager 系统属性设置为 org.jboss.logmanager.LogManager,为 @QuarkusTest 启用正确的日志记录。
系统属性必须在早期设置生效,因此建议在构建系统中进行配置。
在 Maven Surefire 插件配置中设置 java.util.logging.manager 系统属性:
对于 Gradle,在 build.gradle 文件中添加以下配置:
test {
systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
test {
systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
另请参阅 从 IDE 运行 @QuarkusTest 。
1.11. 使用其他日志记录 API 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 依赖于 JBoss Logging 库来满足所有日志记录要求。
假设您使用依赖于其他日志记录库的库,如 Apache Commons Logging、Log4j 或 SLF4J。在这种情况下,将它们从依赖项中排除,并使用其中一个 JBoss Logging 适配器。
这在构建原生可执行文件时尤为重要,因为您可能会在编译原生可执行文件时遇到类似如下的问题:
Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
日志记录实现不包括在原生可执行文件中,但您可以使用 JBoss Logging 适配器解决这个问题。
这些适配器可用于流行的开源日志记录组件,如下一章节中所述。
1.11.1. 在应用程序中添加日志适配器 复制链接链接已复制到粘贴板!
对于每个不是 jboss-logging 的日志记录 API:
添加日志记录适配器库,以确保通过这些 API 记录的消息路由到 JBoss Log Manager 后端。
注意对于是 Quarkus 扩展依赖项的库,这个库不需要自动处理它。
Apache Commons Logging:
使用 Maven:
<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 使用 Gradle:
implementation("org.jboss.logging:commons-logging-jboss-logging")implementation("org.jboss.logging:commons-logging-jboss-logging")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Log4j:
使用 Maven:
<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 使用 Gradle:
implementation("org.jboss.logmanager:log4j-jboss-logmanager")implementation("org.jboss.logmanager:log4j-jboss-logmanager")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Log4j 2:
使用 Maven:
<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 使用 Gradle:
implementation("org.jboss.logmanager:log4j2-jboss-logmanager")implementation("org.jboss.logmanager:log4j2-jboss-logmanager")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意不要包含任何 Log4j 依赖项,因为
log4j2-jboss-logmanager库包含使用 Log4j 作为日志实施所需的所有内容。
SLF4J:
使用 Maven:
<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 使用 Gradle:
implementation("org.jboss.slf4j:slf4j-jboss-logmanager")implementation("org.jboss.slf4j:slf4j-jboss-logmanager")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 验证添加的库生成的日志是否遵循与其他 Quarkus 日志的格式相同。
1.11.2. 使用 MDC 添加上下文日志信息 复制链接链接已复制到粘贴板!
Quarkus 会覆盖日志记录映射的 diagnostics Context (MDC),以改进与其被动内核的兼容性。
1.11.2.1. 添加和读取 MDC 数据 复制链接链接已复制到粘贴板!
要在 MDC 中添加数据,并将其提取到日志输出中:
使用
MDC类设置数据。-
添加
导入 org.jboss.logmanager.MDC; 设置
MDC.put (…),如下例所示:JBoss Logging 和
io.quarkus.logging.Log的示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
添加
将日志格式配置为使用
%X{mdc-key}:quarkus.log.console.format=%d{HH:mm:ss} %-5p request.id=%X{request.id} request.path=%X{request.path} [%c{2.}] (%t) %s%nquarkus.log.console.format=%d{HH:mm:ss} %-5p request.id=%X{request.id} request.path=%X{request.path} [%c{2.}] (%t) %s%nCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成的消息包含 MDC 数据:
08:48:13 INFO request.id=c37a3a36-b7f6-4492-83a1-de41dbc26fe2 request.path=/hello/test [me.sa.GreetingResourceJbossLogging] (executor-thread-1) request received
08:48:13 INFO request.id=c37a3a36-b7f6-4492-83a1-de41dbc26fe2 request.path=/hello/test [me.sa.GreetingResourceJbossLogging] (executor-thread-1) request receivedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.11.2.2. MDC 和支持的日志记录 API 复制链接链接已复制到粘贴板!
根据您的日志记录 API,使用以下 MDC 类之一:
-
Log4j 1 -
org.apache.log4j.MDC.put (key, value) -
Log4j 2 -
org.apache.logging.log4j.ThreadContext.put (key, value) -
SLF4J -
org.slf4j.MDC.put (key, value)
1.11.2.3. MDC 传播 复制链接链接已复制到粘贴板!
在 Quarkus 中,MDC 供应商具有处理被动上下文的特定实现,确保在被动和异步处理过程中传播 MDC 数据。
因此,您仍可在各种情况下访问 MDC 数据:
- 异步调用后,例如,当 REST 客户端返回 Uni 时。
-
在提交到
org.eclipse.microprofile.context.ManagedExecutor的代码中。 -
在使用
vertx.executeBlocking ()执行的代码中。
如果适用,MDC 数据存储在 重复的上下文中,后者是处理单个任务或请求的隔离上下文。
1.12. 日志记录配置参考 复制链接链接已复制到粘贴板!
build 时修复的 :在构建时修复的配置属性 - 所有其他配置属性在运行时可覆盖
| 配置属性 | 类型 | default |
|
build 时修复的 如果启用并存在指标扩展,则会发布日志记录指标。
环境变量: | 布尔值 |
|
|
在构建时间 quarkus.log.min-level] 默认最小日志级别。
环境变量: |
| |
|
在构建时修复了 这将分解 dev 模式的 stacktrace,以显示导致异常的代码中的行
环境变量: | 布尔值 |
|
|
根类别的日志级别,用作所有类别的默认日志级别。<p> JBoss Logging 支持 Apache 风格的日志级别:<p> * {@link org.jboss.logmanager.Level migrationAL} * {@link org.jboss.logmanager.Level:ERROR} * {@link org.jboss.logmanager.Level45WARN} * {@link org.jboss.logmanager.Level#INFO} * {@link org.jboss.logmanager.Level""DEBUG} * {@link org.jboss.logmanager.Level45TRACE} 另外,它还支持标准的 JDK 日志级别。
环境变量: |
| |
|
要链接到根类别的其他处理程序的名称。这些处理程序在 consoleHandlers、fileHandlers 或 syslogHandlers 中定义。
环境变量: | 字符串列表 | |
| 类型 | default | |
|
在构建时修复了
此类别的最小日志级别。默认情况下,所有类别都配置为
若要获取
例如,若要获取
环境变量: | InheritableLevel |
|
|
此类别的日志级别。
请注意,若要获取
环境变量: | InheritableLevel |
|
|
要链接到此类别的处理程序的名称。
环境变量: | 字符串列表 | |
|
指定此日志记录器是否应该将其输出发送到其父 Logger
环境变量: | 布尔值 |
|
| 类型 | default | |
|
如果应该启用控制台日志记录
环境变量: | 布尔值 |
|
|
如果控制台日志记录应该进入
环境变量: | 布尔值 |
|
|
日志格式。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。
环境变量: | string |
|
|
控制台日志级别。
环境变量: |
| |
|
指定颜色应隐藏的数量。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。
环境变量: | int |
|
|
链接到控制台处理程序的过滤器的名称。
环境变量: | string | |
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
| 类型 | default | |
|
如果应该启用文件日志记录
环境变量: | 布尔值 |
|
|
日志格式
环境变量: | string |
|
|
要写入文件的日志级别。
环境变量: |
| |
|
将在其中写入日志的文件名。
环境变量: |
| |
|
要链接到文件处理程序的过滤器的名称。
环境变量: | string | |
|
使用的字符编码
环境变量: | ||
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
|
是否启用日志轮转。
环境变量: | 布尔值 |
|
|
执行轮转后的最大日志文件大小,最高为
环境变量: | MemorySize HEKETI MemorySize 格式 |
|
|
要保留的最大备份数。
环境变量: | int |
|
|
文件处理程序轮转文件后缀。使用时,该文件将根据后缀进行轮转。
后缀必须采用 date-time 格式,它可以被 示例 fileSuffix: .yyyy-MM-dd 注: 如果后缀以 .zip 或 .gz 结尾,则轮转文件也会被压缩。
环境变量: | string | |
|
指明是否在服务器初始化时轮转日志文件。
您需要设置
环境变量: | 布尔值 |
|
| 类型 | default | |
|
如果应启用 syslog 日志记录
环境变量: | 布尔值 |
|
|
Syslog 服务器的 IP 地址和端口
环境变量: | host:port |
|
|
使用 RFC5424 格式格式化消息时使用的应用程序名称
环境变量: | string | |
|
从其中发送消息的主机的名称
环境变量: | string | |
|
设置计算 RFC-5424 和 RFC-3164 定义的消息优先级时使用的工具
环境变量: |
|
|
|
设置
环境变量: |
|
|
|
设置用于连接 Syslog 服务器的协议
环境变量: |
|
|
|
如果启用,则发送的消息将以消息的大小作为前缀
环境变量: |
|
|
|
设置为
环境变量: | 布尔值 |
|
|
启用或禁用在尝试重新连接
环境变量: | 布尔值 |
|
|
日志消息格式
环境变量: | string |
|
|
指定 Syslog 日志记录器记录哪些消息级别的日志级别
环境变量: |
| |
|
要链接到文件处理程序的过滤器的名称。
环境变量: | string | |
|
允许发送的消息的最大长度(以字节为单位),最多
如果没有设置,当 sys-log-type 为
环境变量: | MemorySize HEKETI MemorySize 格式 | |
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
| 类型 | default | |
|
如果应该启用套接字日志记录
环境变量: | 布尔值 |
|
|
接收日志的服务器的 IP 地址和端口
环境变量: | host:port |
|
|
设置用于连接 syslog 服务器的协议
环境变量: |
|
|
|
启用或禁用在尝试重新连接
环境变量: | 布尔值 |
|
|
日志消息格式
环境变量: | string |
|
|
指定日志级别,由套接字日志记录器记录哪些消息级别
环境变量: |
| |
|
要链接到文件处理程序的过滤器的名称。
环境变量: | string | |
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
| 类型 | default | |
|
如果应该启用控制台日志记录
环境变量: | 布尔值 |
|
|
如果控制台日志记录应该进入
环境变量: | 布尔值 |
|
|
日志格式。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。
环境变量: | string |
|
|
控制台日志级别。
环境变量: |
| |
|
指定颜色应隐藏的数量。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。
环境变量: | int |
|
|
链接到控制台处理程序的过滤器的名称。
环境变量: | string | |
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
| 类型 | default | |
|
如果应该启用文件日志记录
环境变量: | 布尔值 |
|
|
日志格式
环境变量: | string |
|
|
要写入文件的日志级别。
环境变量: |
| |
|
将在其中写入日志的文件名。
环境变量: |
| |
|
要链接到文件处理程序的过滤器的名称。
环境变量: | string | |
|
使用的字符编码
环境变量: | ||
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
|
是否启用日志轮转。
环境变量: | 布尔值 |
|
|
执行轮转后的最大日志文件大小,最高为
环境变量: | MemorySize HEKETI MemorySize 格式 |
|
|
要保留的最大备份数。
环境变量: | int |
|
|
文件处理程序轮转文件后缀。使用时,该文件将根据后缀进行轮转。
后缀必须采用 date-time 格式,它可以被 示例 fileSuffix: .yyyy-MM-dd 注: 如果后缀以 .zip 或 .gz 结尾,则轮转文件也会被压缩。
环境变量: | string | |
|
指明是否在服务器初始化时轮转日志文件。
您需要设置
环境变量: | 布尔值 |
|
| 类型 | default | |
|
如果应启用 syslog 日志记录
环境变量: | 布尔值 |
|
|
Syslog 服务器的 IP 地址和端口
环境变量: | host:port |
|
|
使用 RFC5424 格式格式化消息时使用的应用程序名称
环境变量: | string | |
|
从其中发送消息的主机的名称
环境变量: | string | |
|
设置计算 RFC-5424 和 RFC-3164 定义的消息优先级时使用的工具
环境变量: |
|
|
|
设置
环境变量: |
|
|
|
设置用于连接 Syslog 服务器的协议
环境变量: |
|
|
|
如果启用,则发送的消息将以消息的大小作为前缀
环境变量: |
|
|
|
设置为
环境变量: | 布尔值 |
|
|
启用或禁用在尝试重新连接
环境变量: | 布尔值 |
|
|
日志消息格式
环境变量: | string |
|
|
指定 Syslog 日志记录器记录哪些消息级别的日志级别
环境变量: |
| |
|
要链接到文件处理程序的过滤器的名称。
环境变量: | string | |
|
允许发送的消息的最大长度(以字节为单位),最多
如果没有设置,当 sys-log-type 为
环境变量: | MemorySize HEKETI MemorySize 格式 | |
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
| 类型 | default | |
|
如果应该启用套接字日志记录
环境变量: | 布尔值 |
|
|
接收日志的服务器的 IP 地址和端口
环境变量: | host:port |
|
|
设置用于连接 syslog 服务器的协议
环境变量: |
|
|
|
启用或禁用在尝试重新连接
环境变量: | 布尔值 |
|
|
日志消息格式
环境变量: | string |
|
|
指定日志级别,由套接字日志记录器记录哪些消息级别
环境变量: |
| |
|
要链接到文件处理程序的过滤器的名称。
环境变量: | string | |
|
是否异步记录
环境变量: | 布尔值 |
|
|
刷新写入前使用的队列长度
环境变量: | int |
|
|
确定在队列满时是否阻止发布者(而不是丢弃消息)
环境变量: |
|
|
| 类型 | default | |
|
要匹配的消息前缀
环境变量: | 字符串列表 |
|
|
过滤的消息的新日志级别。默认值为 DEBUG。
环境变量: |
|
大小配置选项以这种格式识别字符串(显示为正则表达式): [0-9]+[KkMmGgTtPpEeZzYy]?.
如果未指定后缀,则假定为字节。