日志记录配置


Red Hat build of Quarkus 3.27

Red Hat Customer Content Services

摘要

阅读红帽构建的 Quarkus 中使用日志 API,配置日志输出,以及使用日志记录适配器进行统一输出。

第 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 记录消息的示例:

import org.jboss.logging.Logger;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/hello")
public class ExampleResource {

    private static final Logger LOG = Logger.getLogger(ExampleResource.class);

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        LOG.info("Hello");
        return "hello";
    }
}
Copy to Clipboard Toggle word wrap

注意

虽然 JBoss Logging 将日志信息直接路由到 JBoss Log Manager,但您的其中一个库可能依赖于不同的日志记录 API。在这种情况下,您需要使用 日志适配器 来确保其日志消息也路由到 JBoss Log Manager。

1.2. 获取应用程序日志记录器

要获取红帽构建的 Quarkus 中的应用程序日志记录器,请选择以下方法之一:

1.2.1. 声明 logger 字段

使用这个经典方法,您可以使用特定的 API 获取日志记录器实例,将其存储在类的静态字段中,并在此实例上调用日志操作。

相同的流可以与任何 支持的日志记录 API 应用。

使用 JBoss Logging API 将日志记录器实例存储在静态字段中的示例:

package com.example;

import org.jboss.logging.Logger;

public class MyService {
    private static final Logger log = Logger.getLogger(MyService.class); 
1


    public void doSomething() {
        log.info("It works!"); 
2

    }
}
Copy to Clipboard Toggle word wrap

1
定义 logger 字段。
2
日志对象 调用所需的日志记录方法。

1.2.2. 简化的日志记录

Quarkus 简化了日志记录功能,方法是将日志记录器字段添加到使用 io.quarkus.logging.Log 的类中。这消除了重复样板代码的需求,并增强了日志记录设置便利。

使用静态方法调用简化日志的示例:

package com.example;

import io.quarkus.logging.Log; 
1


class MyService { 
2

    public void doSomething() {
        Log.info("Simple!"); 
3

    }
}
Copy to Clipboard Toggle word wrap

1
io.quarkus.logging.Log 类包含与 JBoss Logging 相同的方法,但它们 是静态的
2
请注意,该类不会声明 logger 字段。这是因为在应用程序构建过程中,在使用 Log API 的每个类中会自动创建 私有静态最终 org.jboss.logging.Logger 字段。调用 Log 方法的类的完全限定名称用作日志记录器名称。在本例中,日志记录器名称为 com.example.MyService
3
最后,所有对 Log 方法的调用都会被重写为应用构建过程中对 logger 字段的常规 JBoss Logging 调用。
警告

仅在应用程序类中使用 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 Name ("…​") 注解了 Logger,则不需要 @inject。

注入后,您可以使用 log 对象来调用日志记录方法。

两种不同类型的日志记录器注入示例:

package com.example;

import org.jboss.logging.Logger;

@ApplicationScoped
class SimpleBean {

   @Inject
   Logger log; 
1


   @LoggerName("foo")
   Logger fooLog; 
2


   public void ping() {
     log.info("Simple!");
     fooLog.info("Goes to _foo_ logger!");
   }
}
Copy to Clipboard Toggle word wrap

1
声明类的完全限定类名称(FQCN)用作日志记录器名称,例如 org.jboss.logging.Logger.getLogger.getLogger (SimpleBean.class)
2
在本例中,名称 foo 用作日志记录器名称,例如 org.jboss.logging.Logger.getLogger ("foo")
注意

日志记录器实例在内部缓存。因此,当将日志记录器注入 @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

TRACE 相比增加了调试输出,这可能会提高频率更高。

Expand
表 1.2. 级别之间的映射
数字级别值标准级别名称等效的 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
Copy to Clipboard Toggle word wrap

等同于 YAML (包括 Quarkus YAML 扩展 )将是:

quarkus:
  log:
    level: INFO
    category:
      org.hibernate: # The org.hibernate as a single key here is important
        level: DEBUG
Copy to Clipboard Toggle word wrap

将日志级别设置为 DEBUG 以下时,还必须调整最小日志级别。此设置可以通过 quarkus.log.min-level 配置属性或每个类别进行全局应用:

quarkus.log.category."org.hibernate".min-level=TRACE
Copy to Clipboard Toggle word wrap

这会设置一个 floor 级别,用于 Quarkus 需要生成支持代码。构建时必须设置最小日志级别,以便 Quarkus 能够打开导致在不可用级别登录时优化机会。

来自原生执行的示例:

INFO 设置为最小日志级别会将较低级别检查(如 isTraceEnabled )设置为 false。这标识了像 if (logger.isDebug ())callMethod () 等代码,它将永远不会执行,并将其标记为"dead"。

警告

如果您在命令行中添加这些属性,请确保 " 字符被正确转义:

-Dquarkus.log.category.\"org.hibernate\".level=TRACE
Copy to Clipboard Toggle word wrap

所有潜在的属性都列在 日志记录配置参考 部分中。

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
Copy to Clipboard Toggle word wrap

在本例中,根类别配置为使用两个命名的处理程序: conmylog

例 1.2. 每个类别配置示例:

quarkus.log.category."org.apache.kafka.clients".level=INFO
quarkus.log.category."org.apache.kafka.common.utils".level=INFO
Copy to Clipboard Toggle word wrap

本例演示了如何在类别 org.apache.kafka.clientsorg.apache.kafka.common.utils 中配置最小日志级别。

如需更多信息,请参阅 日志记录配置参考

如果要为特定类别配置额外的内容,请创建一个名为 handler,如 quarkus.log.handler.[console|file|syslog].<your-handler-name> unset,并使用 quarkus.log.category.<my-category>.handlers 进行设置。

用例示例可能需要为日志消息使用不同的时间戳格式,这些消息被保存到一个文件,而不是用于其他处理程序的格式。

有关更多演示,请参阅 将指定 处理程序的输出附加到类别 示例。

Expand
属性名称default描述

quarkus.log.category."<category-name>".level

INFO [a]

用于配置名为 < category-name> 的类别的级别。引号是必需的。

quarkus.log.category."<category-name>".min-level

DEBUG

用于配置名为 < category-name> 的类别的最小日志记录级别。引号是必需的。

quarkus.log.category."<category-name>".use-parent-handlers

true

指定此日志记录器是否应该将其输出发送到其父日志记录器。

quarkus.log.category."<category-name>".handlers=[<handler>]

empty [b]

要附加到特定类别的处理程序的名称。

[a] 有些扩展可能会为某些类别定义自定义的默认日志级别,以默认减少日志通知。在配置中设置日志级别将覆盖任何扩展定义的日志级别。
[b] 默认情况下,配置的类别获得与根日志记录器上连接的相同处理程序。
注意

. 符号分隔配置属性中的特定部分。属性名称中的 quotes 用作保留类别规格所需的转义,如 quarkus.log.category."io.quarkus.smallrye.jwt".level=TRACE, 完整。

1.4.2. 根日志记录器配置

根日志记录器类别单独处理,并使用以下属性进行配置:

Expand
属性名称default描述

quarkus.log.level

INFO

每个日志类别的默认日志级别。

quarkus.log.min-level

DEBUG

每个日志类别的默认最小日志级别。

  • 如果给定日志记录器类别没有级别配置,则会检查父类别。
  • 如果没有为类别和任何父类别提供特定配置,则使用根日志记录器配置。
注意

虽然根日志记录器的处理程序通常通过 quarkus.log.consolequarkus.log.filequarkus.log.syslog 直接配置,但它可以使用 quarkus.log.handlers 属性为其附加额外的命名处理程序。

1.5. 日志记录格式

红帽构建的 Quarkus 使用基于模式的日志格式程序,默认生成人类可读的文本日志,但您也可以使用 dedicated 属性为每个日志处理程序配置格式。

对于 console 处理程序,属性为 quarkus.log.console.format

日志记录格式字符串支持以下符号:

Expand
符号Summary描述

%%

%

呈现简单的 % 字符。

%c

类别

呈现类别名称。

%C

源类

呈现源类名称。[a]

%d{xxx}

Date

使用给定日期格式字符串呈现日期,它使用 java.text.SimpleDateFormat 定义的语法。

%e

例外

呈现抛出的异常(若有)。

%F

源文件

呈现源文件名。[a]

%h

主机名

呈现系统简单主机名。

%H

限定主机名

呈现系统的完全限定主机名,这可能与简单的主机名相同,具体取决于操作系统配置。

%i

进程 ID

呈现当前进程 PID。

%l

源位置

呈现源位置信息,其中包括源文件名、行号、类名称和方法名称。[a]

%L

源行

呈现源行号。[a]

%m

完整消息

呈现日志消息加上异常(如果有)。

%M

源方法

呈现源方法名称。[a]

%n

换行符

呈现特定于平台的行分隔符字符串。

%N

进程名称

呈现当前进程的名称。

%p

级别

呈现消息的日志级别。

%r

相对时间

从应用程序日志开始后,呈现时间(毫秒)。

%s

简单消息

仅呈现日志消息,没有异常追踪。

%t

线程名称

呈现线程名称。

%t{id}

线程 ID

呈现线程 ID。

%z{<zone name>}

时区

将输出的时区设置为 < zone name& gt;。

%x{<MDC 属性 name>}

映射的诊断上下文值

呈现映射诊断上下文中的值。

%X

映射的诊断上下文值

{property.key=property.value} 格式呈现 Mapped diagnose Context 中的所有值。

%x

嵌套诊断上下文值

{value1.value2} 格式呈现来自 Nested diagnosticss Context 中的所有值。

[a] 格式检查调用者信息可能会影响性能的序列

1.5.1. 其他控制台日志记录格式

更改控制台日志格式很有用,例如,当处理并存储日志信息的服务捕获 Quarkus 应用程序的控制台输出时。

1.5.1.1. JSON 日志记录格式

quarkus-logging-json 扩展可能会用于添加对 JSON 日志记录格式及其相关配置的支持。

  1. 在构建文件中添加此扩展,如下所示:

    • 使用 Maven:

      <dependency>
          <groupId>io.quarkus</groupId>
          <artifactId>quarkus-logging-json</artifactId>
      </dependency>
      Copy to Clipboard Toggle word wrap
    • 使用 Gradle:

      implementation("io.quarkus:quarkus-logging-json")
      Copy to Clipboard Toggle word wrap

      默认情况下,此扩展存在替换了控制台配置中的输出格式配置,格式字符串和颜色设置(若有)将被忽略。将继续应用其他控制台配置项,包括控制异步日志记录和日志级别等。

      在某些情况下,最好在 dev 模式中使用人类可读的(未结构化)登录,在生产环境模式中使用 JSON 日志记录(结构化)。这可以通过使用不同的配置文件来实现,如以下配置中所示。

  2. 在 application.properties 中为 dev 和 test 模式禁用 JSON 日志记录:

    %dev.quarkus.log.console.json.enabled=false
    %test.quarkus.log.console.json.enabled=false
    Copy to Clipboard Toggle word wrap
1.5.1.1.1. 配置

使用支持的属性配置 JSON 日志记录扩展,以自定义其行为。

build 时修复的 :在构建时修复的配置属性 - 所有其他配置属性在运行时可覆盖

Expand

配置属性

Type

default

Console logging

Type

default

quarkus.log.console.json.enabled

确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ENABLED

布尔值

 

quarkus.log.console.json.pretty-print

启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。

环境变量: QUARKUS_LOG_CONSOLE_JSON_PRETTY_PRINT

布尔值

false

quarkus.log.console.json.date-format

要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。

环境变量: QUARKUS_LOG_CONSOLE_JSON_DATE_FORMAT

string

default

quarkus.log.console.json.record-delimiter

要使用的特殊记录分隔符。默认情况下使用 newline。

环境变量: QUARKUS_LOG_CONSOLE_JSON_RECORD_DELIMITER

string

 

quarkus.log.console.json.zone-id

要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ZONE_ID

string

default

quarkus.log.console.json.exception-output-type

要指定的异常输出类型。

环境变量: QUARKUS_LOG_CONSOLE_JSON_EXCEPTION_OUTPUT_TYPE

详细格式化的 ,详细格式

详细

quarkus.log.console.json.print-details

在日志中可以打印更多详细信息。

打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。

环境变量: QUARKUS_LOG_CONSOLE_JSON_PRINT_DETAILS

布尔值

false

quarkus.log.console.json.key-overrides

使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。

环境变量: QUARKUS_LOG_CONSOLE_JSON_KEY_OVERRIDES

string

 

quarkus.log.console.json.excluded-keys

在 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_CONSOLE_JSON_EXCLUDED_KEYS

字符串列表

 

quarkus.log.console.json.additional-field."field-name".value

其他字段值。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

string

所需的 HEKETI Required

quarkus.log.console.json.additional-field."field-name".type

其他字段类型规格。支持的类型: 字符串int。如果没有指定,则字符串为默认值。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ADDITIONAL_FIELD__FIELD_NAME_TYPE

字符串,int,long

string

quarkus.log.console.json.log-format

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_CONSOLE_JSON_LOG_FORMAT

默认,ecs

default

File logging

Type

default

quarkus.log.file.json.enabled

确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。

环境变量: QUARKUS_LOG_FILE_JSON_ENABLED

布尔值

 

quarkus.log.file.json.pretty-print

启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。

环境变量: QUARKUS_LOG_FILE_JSON_PRETTY_PRINT

布尔值

false

quarkus.log.file.json.date-format

要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。

环境变量: QUARKUS_LOG_FILE_JSON_DATE_FORMAT

string

default

quarkus.log.file.json.record-delimiter

要使用的特殊记录分隔符。默认情况下使用 newline。

环境变量: QUARKUS_LOG_FILE_JSON_RECORD_DELIMITER

string

 

quarkus.log.file.json.zone-id

要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。

环境变量: QUARKUS_LOG_FILE_JSON_ZONE_ID

string

default

quarkus.log.file.json.exception-output-type

要指定的异常输出类型。

环境变量: QUARKUS_LOG_FILE_JSON_EXCEPTION_OUTPUT_TYPE

详细格式化的 ,详细格式

详细

quarkus.log.file.json.print-details

在日志中可以打印更多详细信息。

打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。

环境变量: QUARKUS_LOG_FILE_JSON_PRINT_DETAILS

布尔值

false

quarkus.log.file.json.key-overrides

使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。

环境变量: QUARKUS_LOG_FILE_JSON_KEY_OVERRIDES

string

 

quarkus.log.file.json.excluded-keys

在 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_FILE_JSON_EXCLUDED_KEYS

字符串列表

 

quarkus.log.file.json.additional-field."field-name".value

其他字段值。

环境变量: QUARKUS_LOG_FILE_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

string

所需的 HEKETI Required

quarkus.log.file.json.additional-field."field-name".type

其他字段类型规格。支持的类型: 字符串int。如果没有指定,则字符串为默认值。

环境变量 : QUARKUS_LOG_FILE_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

字符串,int,long

string

quarkus.log.file.json.log-format

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_FILE_JSON_LOG_FORMAT

默认,ecs

default

Syslog logging

Type

default

quarkus.log.syslog.json.enabled

确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ENABLED

布尔值

 

quarkus.log.syslog.json.pretty-print

启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。

环境变量: QUARKUS_LOG_SYSLOG_JSON_PRETTY_PRINT

布尔值

false

quarkus.log.syslog.json.date-format

要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。

环境变量: QUARKUS_LOG_SYSLOG_JSON_DATE_FORMAT

string

default

quarkus.log.syslog.json.record-delimiter

要使用的特殊记录分隔符。默认情况下使用 newline。

环境变量: QUARKUS_LOG_SYSLOG_JSON_RECORD_DELIMITER

string

 

quarkus.log.syslog.json.zone-id

要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ZONE_ID

string

default

quarkus.log.syslog.json.exception-output-type

要指定的异常输出类型。

环境变量: QUARKUS_LOG_SYSLOG_JSON_EXCEPTION_OUTPUT_TYPE

详细格式化的 ,详细格式

详细

quarkus.log.syslog.json.print-details

在日志中可以打印更多详细信息。

打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。

环境变量: QUARKUS_LOG_SYSLOG_JSON_PRINT_DETAILS

布尔值

false

quarkus.log.syslog.json.key-overrides

使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。

环境变量: QUARKUS_LOG_SYSLOG_JSON_KEY_OVERRIDES

string

 

quarkus.log.syslog.json.excluded-keys

在 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_SYSLOG_JSON_EXCLUDED_KEYS

字符串列表

 

quarkus.log.syslog.json.additional-field."field-name".value

其他字段值。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

string

所需的 HEKETI Required

quarkus.log.syslog.json.additional-field."field-name".type

其他字段类型规格。支持的类型: 字符串int。如果没有指定,则字符串为默认值。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

字符串,int,long

string

quarkus.log.syslog.json.log-format

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_SYSLOG_JSON_LOG_FORMAT

默认,ecs

default

Socket logging

Type

default

quarkus.log.socket.json.enabled

确定是否启用 JSON 控制台格式化扩展,该扩展将禁用"常规"控制台格式。

环境变量: QUARKUS_LOG_SOCKET_JSON_ENABLED

布尔值

 

quarkus.log.socket.json.pretty-print

启用 JSON 记录的"pretty 打印"。请注意,有些 JSON 解析器将无法读取用户打印的输出。

环境变量: QUARKUS_LOG_SOCKET_JSON_PRETTY_PRINT

布尔值

false

quarkus.log.socket.json.date-format

要使用的日期格式。特殊字符串 "default" 表示应使用默认格式。

环境变量: QUARKUS_LOG_SOCKET_JSON_DATE_FORMAT

string

default

quarkus.log.socket.json.record-delimiter

要使用的特殊记录分隔符。默认情况下使用 newline。

环境变量: QUARKUS_LOG_SOCKET_JSON_RECORD_DELIMITER

string

 

quarkus.log.socket.json.zone-id

要使用的区域 ID。特殊字符串 "default" 表示应使用默认区域。

环境变量: QUARKUS_LOG_SOCKET_JSON_ZONE_ID

string

default

quarkus.log.socket.json.exception-output-type

要指定的异常输出类型。

环境变量: QUARKUS_LOG_SOCKET_JSON_EXCEPTION_OUTPUT_TYPE

详细格式化的 ,详细格式

详细

quarkus.log.socket.json.print-details

在日志中可以打印更多详细信息。

打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。

环境变量: QUARKUS_LOG_SOCKET_JSON_PRINT_DETAILS

布尔值

false

quarkus.log.socket.json.key-overrides

使用自定义值覆盖键。省略这个值表示不会应用密钥覆盖。

环境变量: QUARKUS_LOG_SOCKET_JSON_KEY_OVERRIDES

string

 

quarkus.log.socket.json.excluded-keys

在 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_SOCKET_JSON_EXCLUDED_KEYS

字符串列表

 

quarkus.log.socket.json.additional-field."field-name".value

其他字段值。

环境变量: QUARKUS_LOG_SOCKET_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

string

所需的 HEKETI Required

quarkus.log.socket.json.additional-field."field-name".type

其他字段类型规格。支持的类型: 字符串int。如果没有指定,则字符串为默认值。

环境变量: QUARKUS_LOG_SOCKET_JSON_ADDITIONAL_FIELD__FIELD_NAME_NAME_TYPE

字符串,int,long

string

quarkus.log.socket.json.log-format

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_SOCKET_JSON_LOG_FORMAT

默认,ecs

default

警告

启用用户进行打印可能会导致某些处理器和 JSON 解析器失败。

注意

打印详细信息可能会昂贵,因为值是从调用者检索的。详情包括源类名称、源文件名、源方法名称和源行号。

1.6. 日志处理程序

日志处理程序是一个日志组件,负责将日志事件提交到接收者。红帽构建的 Quarkus 包括几个不同的日志处理程序: consolefilesyslog

功能示例使用 com.example 作为日志记录类别。

1.6.1. 控制台日志处理程序

控制台日志处理程序默认启用,它会将所有日志事件定向到应用的控制台,通常是系统的 stdout

  • 全局配置示例:

    quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%n
    Copy to Clipboard Toggle word wrap
  • 每个类别配置示例:

    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=false
    Copy to Clipboard Toggle word wrap

有关其配置的详情,请查看 控制台日志记录配置 参考。

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%n
    Copy to Clipboard Toggle word wrap
  • 每个类别配置示例:

    quarkus.log.handler.file.my-file-handler.enable=true
    quarkus.log.handler.file.my-file-handler.path=application.log
    quarkus.log.handler.file.my-file-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n
    
    quarkus.log.category."com.example".handlers=my-file-handler
    quarkus.log.category."com.example".use-parent-handlers=false
    Copy to Clipboard Toggle word wrap

有关其配置的详情,请查看 文件日志记录配置 参考。

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%n
    Copy to Clipboard Toggle word wrap
  • 每个类别配置示例:

    quarkus.log.handler.syslog.my-syslog-handler.enable=true
    quarkus.log.handler.syslog.my-syslog-handler.app-name=my-application
    quarkus.log.handler.syslog.my-syslog-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n
    
    quarkus.log.category."com.example".handlers=my-syslog-handler
    quarkus.log.category."com.example".use-parent-handlers=false
    Copy to Clipboard Toggle word wrap

有关其配置的详情,请查看 Syslog 日志记录配置 参考。

1.6.4. 套接字日志处理程序

此处理程序将日志发送到套接字。套接字日志处理程序默认为禁用;使其能够使用它。启用后,它会将所有日志事件发送到套接字,如 Logstash 服务器。

  • 全局配置示例:

    quarkus.log.socket.enable=true
    quarkus.log.socket.endpoint=localhost:4560
    Copy to Clipboard Toggle word wrap

通常,此处理程序与 quarkus-logging-json 扩展一起使用,将 ECS 格式的日志发送到 Elasticsearch 实例。有关示例配置,请参阅 集中日志管理指南

日志处理程序(如控制台日志处理程序)可以与决定是否应记录日志 的过滤器 相关联。

注册日志记录过滤器:

  1. 注解一个 最终 类,它使用 @io.quarkus.logging.LoggingFilter 实现 java.util.logging.Filter,并设置 name 属性:

    编写过滤器的示例:

    package com.example;
    
    import io.quarkus.logging.LoggingFilter;
    import java.util.logging.Filter;
    import java.util.logging.LogRecord;
    
    @LoggingFilter(name = "my-filter")
    public final class TestFilter implements Filter {
    
        private final String part;
    
        public TestFilter(@ConfigProperty(name = "my-filter.part") String part) {
            this.part = part;
        }
    
        @Override
        public boolean isLoggable(LogRecord record) {
            return !record.getMessage().contains(part);
        }
    }
    Copy to Clipboard Toggle word wrap

    在本例中,我们将包含控制台日志中特定文本的日志记录中排除。要过滤 的特定文本不是硬编码的,而是从 my-filter.part 配置属性中读取。

    application.properties 中配置过滤器的示例:

    my-filter.part=TEST
    Copy to Clipboard Toggle word wrap

  2. 使用位于 application.properties 中的 过滤器 配置属性将过滤器附加到对应的处理程序:

    quarkus.log.console.filter=my-filter
    Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

注意

如果您在命令行中添加这些属性,请确保 " 被转义。例如,-Dquarkus.log.category.\"io.quarkus\".level=DEBUG

文件 TRACE 日志配置

quarkus.log.file.enable=true
# Send output to a trace.log file under the /tmp directory
quarkus.log.file.path=/tmp/trace.log
quarkus.log.file.level=TRACE
quarkus.log.file.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
# Set 2 categories (io.quarkus.smallrye.jwt, io.undertow.request.security) to TRACE level
quarkus.log.min-level=TRACE
quarkus.log.category."io.quarkus.smallrye.jwt".level=TRACE
quarkus.log.category."io.undertow.request.security".level=TRACE
Copy to Clipboard Toggle word wrap

注意

由于我们不会更改根日志记录器,控制台日志仅包含 INFO 或更高级别的日志。

附加到类别的命名处理程序

# Send output to a trace.log file under the /tmp directory
quarkus.log.file.path=/tmp/trace.log
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
# Configure a named handler that logs to console
quarkus.log.handler.console."STRUCTURED_LOGGING".format=%e%n
# Configure a named handler that logs to file
quarkus.log.handler.file."STRUCTURED_LOGGING_FILE".enable=true
quarkus.log.handler.file."STRUCTURED_LOGGING_FILE".format=%e%n
# Configure the category and link the two named handlers to it
quarkus.log.category."io.quarkus.category".level=INFO
quarkus.log.category."io.quarkus.category".handlers=STRUCTURED_LOGGING,STRUCTURED_LOGGING_FILE
Copy to Clipboard Toggle word wrap

附加到根日志记录器的命名处理程序

# 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
Copy to Clipboard Toggle word wrap

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 系统属性:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>${surefire-plugin.version}</version>
      <configuration>
        <systemPropertyVariables>
          <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> 
1

          <quarkus.log.level>DEBUG</quarkus.log.level>  
2

          <maven.home>${maven.home}</maven.home>
        </systemPropertyVariables>
      </configuration>
    </plugin>
  </plugins>
</build>
Copy to Clipboard Toggle word wrap

1
确保使用了 org.jboss.logmanager.LogManager
2
为所有日志记录类别启用调试日志记录。

对于 Gradle,在 build.gradle 文件中添加以下配置:

test {
	systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
Copy to Clipboard Toggle word wrap

另请参阅 从 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
Copy to Clipboard Toggle word wrap

日志记录实现不包括在原生可执行文件中,但您可以使用 JBoss Logging 适配器解决这个问题。

这些适配器可用于流行的开源日志记录组件,如下一章节中所述。

1.11.1. 在应用程序中添加日志适配器

对于每个不是 jboss-logging 的日志记录 API:

  1. 添加日志记录适配器库,以确保通过这些 API 记录的消息路由到 JBoss Log Manager 后端。

    注意

    对于是 Quarkus 扩展依赖项的库,这个库不需要自动处理它。

    • Apache Commons Logging:

      • 使用 Maven:

        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>commons-logging-jboss-logging</artifactId>
        </dependency>
        Copy to Clipboard Toggle word wrap
      • 使用 Gradle:

        implementation("org.jboss.logging:commons-logging-jboss-logging")
        Copy to Clipboard Toggle word wrap
    • Log4j:

      • 使用 Maven:

        <dependency>
            <groupId>org.jboss.logmanager</groupId>
            <artifactId>log4j-jboss-logmanager</artifactId>
        </dependency>
        Copy to Clipboard Toggle word wrap
      • 使用 Gradle:

        implementation("org.jboss.logmanager:log4j-jboss-logmanager")
        Copy to Clipboard Toggle word wrap
    • Log4j 2:

      • 使用 Maven:

        <dependency>
            <groupId>org.jboss.logmanager</groupId>
            <artifactId>log4j2-jboss-logmanager</artifactId>
        </dependency>
        Copy to Clipboard Toggle word wrap
      • 使用 Gradle:

        implementation("org.jboss.logmanager:log4j2-jboss-logmanager")
        Copy to Clipboard Toggle word wrap
        注意

        不要包含任何 Log4j 依赖项,因为 log4j2-jboss-logmanager 库包含使用 Log4j 作为日志实施所需的所有内容。

    • SLF4J:

      • 使用 Maven:

        <dependency>
            <groupId>org.jboss.slf4j</groupId>
            <artifactId>slf4j-jboss-logmanager</artifactId>
        </dependency>
        Copy to Clipboard Toggle word wrap
      • 使用 Gradle:

        implementation("org.jboss.slf4j:slf4j-jboss-logmanager")
        Copy to Clipboard Toggle word wrap
  2. 验证添加的库生成的日志是否遵循与其他 Quarkus 日志的格式相同。

1.11.2. 使用 MDC 添加上下文日志信息

Quarkus 会覆盖日志记录映射的 diagnostics Context (MDC),以改进与其被动内核的兼容性。

1.11.2.1. 添加和读取 MDC 数据

要在 MDC 中添加数据,并将其提取到日志输出中:

  1. 使用 MDC 类设置数据。

    1. 添加 导入 org.jboss.logmanager.MDC;
    2. 设置 MDC.put (…​),如下例所示:

      JBoss Logging 和 io.quarkus.logging.Log的示例

      package me.sample;
      
      import io.quarkus.logging.Log;
      import jakarta.ws.rs.GET;
      import jakarta.ws.rs.Path;
      import org.jboss.logmanager.MDC;
      
      import java.util.UUID;
      
      @Path("/hello/jboss")
      public class GreetingResourceJbossLogging {
      
          @GET
          @Path("/test")
          public String greeting() {
              MDC.put("request.id", UUID.randomUUID().toString());
              MDC.put("request.path", "/hello/test");
              Log.info("request received");
              return "hello world!";
          }
      }
      Copy to Clipboard Toggle word wrap

  2. 将日志格式配置为使用 %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%n
    Copy to Clipboard Toggle word wrap

    生成的消息包含 MDC 数据:

    08:48:13 INFO request.id=c37a3a36-b7f6-4492-83a1-de41dbc26fe2 request.path=/hello/test [me.sa.GreetingResourceJbossLogging] (executor-thread-1) request received
    Copy to Clipboard Toggle word wrap
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 时修复的 :在构建时修复的配置属性 - 所有其他配置属性在运行时可覆盖

Expand

配置属性

类型

default

build 时修复的 quarkus.log.metrics.enabled

如果启用并存在指标扩展,则会发布日志记录指标。

环境变量: QUARKUS_LOG_METRICS_ENABLED

布尔值

false

在构建时间 quarkus.log.min-level] quarkus.log.min-level

默认最小日志级别。

环境变量: QUARKUS_LOG_MIN_LEVEL

级别

DEBUG

在构建时修复了 quarkus.log.decorate-stacktraces

这将分解 dev 模式的 stacktrace,以显示导致异常的代码中的行

环境变量: QUARKUS_LOG_DECORATE_STACKTRACES

布尔值

true

quarkus.log.level

根类别的日志级别,用作所有类别的默认日志级别。<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 日志级别。

环境变量: QUARKUS_LOG_LEVEL

级别

INFO

quarkus.log.handlers

要链接到根类别的其他处理程序的名称。这些处理程序在 consoleHandlers、fileHandlers 或 syslogHandlers 中定义。

环境变量: QUARKUS_LOG_HANDLERS

字符串列表

 

Minimum logging categories

类型

default

在构建时修复了 quarkus.log.category."categories".min-level

此类别的最小日志级别。默认情况下,所有类别都配置为 DEBUG 最低级别。

若要获取 DEBUG 以下的运行时日志记录,如 TRACE,可调整构建时的最小级别。在运行时需要提供正确的日志级别。

例如,若要获取 TRACE 日志记录,最低级别需要位于 TRACE 中,并且运行时日志级别需要匹配。

环境变量: QUARKUS_LOG_CATEGORY_CATEGORIES__MIN_LEVEL

InheritableLevel

继承

quarkus.log.category."categories".level

此类别的日志级别。

请注意,若要获取 INFO 以下的日志级别,还需要调整最小级别的构建时配置选项。

环境变量: QUARKUS_LOG_CATEGORY_CATEGORIES_LEVEL

InheritableLevel

继承

quarkus.log.category."categories".handlers

要链接到此类别的处理程序的名称。

环境变量: QUARKUS_LOG_CATEGORY_CATEGORIES_HANDLERS

字符串列表

 

quarkus.log.category."categories".use-parent-handlers

指定此日志记录器是否应该将其输出发送到其父 Logger

环境变量: QUARKUS_LOG_CATEGORY_CATEGORIES__USE_PARENT_HANDLERS

布尔值

true

Console logging

类型

default

quarkus.log.console.enabled

如果应该启用控制台日志记录

环境变量: QUARKUS_LOG_CONSOLE_ENABLED

布尔值

true

quarkus.log.console.stderr

如果控制台日志记录应该进入 System#err,而不是 System#out

环境变量: QUARKUS_LOG_CONSOLE_STDERR

布尔值

false

quarkus.log.console.format

日志格式。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。

环境变量: QUARKUS_LOG_CONSOLE_FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.console.level

控制台日志级别。

环境变量: QUARKUS_LOG_CONSOLE_LEVEL

级别

ALL

quarkus.log.console.darken

指定颜色应隐藏的数量。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。

环境变量: QUARKUS_LOG_CONSOLE_DARKEN

int

0

quarkus.log.console.filter

链接到控制台处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_CONSOLE_FILTER

string

 

quarkus.log.console.async.enabled

是否异步记录

环境变量: QUARKUS_LOG_CONSOLE_ASYNC_ENABLED

布尔值

false

quarkus.log.console.async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_CONSOLE_ASYNC_QUEUE_LENGTH

int

512

quarkus.log.console.async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_CONSOLE_ASYNC_OVERFLOW

丢弃

block

File logging

类型

default

quarkus.log.file.enabled

如果应该启用文件日志记录

环境变量: QUARKUS_LOG_FILE_ENABLED

布尔值

false

quarkus.log.file.format

日志格式

环境变量: QUARKUS_LOG_FILE_FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %h %N[%i] %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.file.level

要写入文件的日志级别。

环境变量: QUARKUS_LOG_FILE_LEVEL

级别

ALL

quarkus.log.file.path

将在其中写入日志的文件名。

环境变量: QUARKUS_LOG_FILE_PATH

File

quarkus.log

quarkus.log.file.filter

要链接到文件处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_FILE_FILTER

string

 

quarkus.log.file.encoding

使用的字符编码

环境变量: QUARKUS_LOG_FILE_ENCODING

charset

 

quarkus.log.file.async.enabled

是否异步记录

环境变量: QUARKUS_LOG_FILE_ASYNC_ENABLED

布尔值

false

quarkus.log.file.async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_FILE_ASYNC_QUEUE_LENGTH

int

512

quarkus.log.file.async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_FILE_ASYNC_OVERFLOW

丢弃

block

quarkus.log.file.rotation.enabled

是否启用日志轮转。

环境变量: QUARKUS_LOG_FILE_ROTATION_ENABLED

布尔值

true

quarkus.log.file.rotation.max-file-size

执行轮转后的最大日志文件大小,最高为 Long.MAX_VALUE 字节。请注意,在写入日志记录 ,该文件会被轮转。因此,这并不是文件大小硬最大,而是在轮转文件前,对文件的大小进行硬性。

环境变量: QUARKUS_LOG_FILE_ROTATION_MAX_FILE_SIZE

MemorySize HEKETI MemorySize 格式

10M

quarkus.log.file.rotation.max-backup-index

要保留的最大备份数。

环境变量: QUARKUS_LOG_FILE_ROTATION_MAX_BACKUP_INDEX

int

5

quarkus.log.file.rotation.file-suffix

文件处理程序轮转文件后缀。使用时,该文件将根据后缀进行轮转。

后缀必须采用 date-time 格式,它可以被 DateTimeFormatter 理解。

示例 fileSuffix: .yyyy-MM-dd

注: 如果后缀以 .zip 或 .gz 结尾,则轮转文件也会被压缩。

环境变量: QUARKUS_LOG_FILE_ROTATION_FILE_SUFFIX

string

 

quarkus.log.file.rotation.rotate-on-boot

指明是否在服务器初始化时轮转日志文件。

您需要设置 max-file-size 或配置 file-suffix 以便它正常工作。

环境变量: QUARKUS_LOG_FILE_ROTATION_ROTATE_ON_BOOT

布尔值

true

Syslog logging

类型

default

quarkus.log.syslog.enabled

如果应启用 syslog 日志记录

环境变量: QUARKUS_LOG_SYSLOG_ENABLED

布尔值

false

quarkus.log.syslog.endpoint

Syslog 服务器的 IP 地址和端口

环境变量: QUARKUS_LOG_SYSLOG_ENDPOINT

host:port

localhost:514

quarkus.log.syslog.app-name

使用 RFC5424 格式格式化消息时使用的应用程序名称

环境变量: QUARKUS_LOG_SYSLOG_APP_NAME

string

 

quarkus.log.syslog.hostname

从其中发送消息的主机的名称

环境变量: QUARKUS_LOG_SYSLOG_HOSTNAME

string

 

quarkus.log.syslog.facility

设置计算 RFC-5424 和 RFC-3164 定义的消息优先级时使用的工具

环境变量: QUARKUS_LOG_SYSLOG_FACILITY

kernel,用户级,mail-system,system-daemons,security,syslogd,line-printer,network-news,uucp,clock-daemon,security2,ftp-daemon,ntp,log-audit,log-alert,clock-daemon2,local-use-0, local-use-0 ,local-use-1,local-use-2,local-use-3,local-use-4 , local-use -5, local-use- 6, local-use-7

用户级别

quarkus.log.syslog.syslog-type

设置 SyslogType syslog 类型 此处理程序应该用来格式化发送的消息

环境变量: QUARKUS_LOG_SYSLOG_SYSLOG_TYPE

rfc5424, rfc3164

rfc5424

quarkus.log.syslog.protocol

设置用于连接 Syslog 服务器的协议

环境变量: QUARKUS_LOG_SYSLOG_PROTOCOL

TCP,udp,ssl-tcp

tcp

quarkus.log.syslog.use-counting-framing

如果启用,则发送的消息将以消息的大小作为前缀

环境变量: QUARKUS_LOG_SYSLOG_USE_COUNTING_FRAMING

,false,协议独立

protocol-dependent

quarkus.log.syslog.truncate

设置为 true 会在超过最大长度时截断消息

环境变量: QUARKUS_LOG_SYSLOG_TRUNCATE

布尔值

true

quarkus.log.syslog.block-on-reconnect

启用或禁用在尝试重新连接 Protocol#TCP TCPProtocol#SSL_TCP SSL TCP 协议时的阻塞

环境变量: QUARKUS_LOG_SYSLOG_BLOCK_ON_RECONNECT

布尔值

false

quarkus.log.syslog.format

日志消息格式

环境变量: QUARKUS_LOG_SYSLOG_FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.syslog.level

指定 Syslog 日志记录器记录哪些消息级别的日志级别

环境变量: QUARKUS_LOG_SYSLOG_LEVEL

级别

ALL

quarkus.log.syslog.filter

要链接到文件处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_SYSLOG_FILTER

string

 

quarkus.log.syslog.max-length

允许发送的消息的最大长度(以字节为单位),最多 Integer.MAX_VALUE 字节。长度包括标头和消息。

如果没有设置,当 sys-log-type 为 rfc5424 时,如果 sys-log-type 为 rfc3164,则默认值为 1024,当 sys-log-typerfc3164时,默认值为 1024

环境变量: QUARKUS_LOG_SYSLOG_MAX_LENGTH

MemorySize HEKETI MemorySize 格式

 

quarkus.log.syslog.async.enabled

是否异步记录

环境变量: QUARKUS_LOG_SYSLOG_ASYNC_ENABLED

布尔值

false

quarkus.log.syslog.async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_SYSLOG_ASYNC_QUEUE_LENGTH

int

512

quarkus.log.syslog.async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_SYSLOG_ASYNC_OVERFLOW

丢弃

block

Socket logging

类型

default

quarkus.log.socket.enabled

如果应该启用套接字日志记录

环境变量: QUARKUS_LOG_SOCKET_ENABLED

布尔值

false

quarkus.log.socket.endpoint

接收日志的服务器的 IP 地址和端口

环境变量: QUARKUS_LOG_SOCKET_ENDPOINT

host:port

localhost:4560

quarkus.log.socket.protocol

设置用于连接 syslog 服务器的协议

环境变量: QUARKUS_LOG_SOCKET_PROTOCOL

TCP,udp,ssl-tcp

tcp

quarkus.log.socket.block-on-reconnect

启用或禁用在尝试重新连接 Protocol#TCP TCPProtocol#SSL_TCP SSL TCP 协议时的阻塞

环境变量: QUARKUS_LOG_SOCKET_BLOCK_ON_RECONNECT

布尔值

false

quarkus.log.socket.format

日志消息格式

环境变量: QUARKUS_LOG_SOCKET_FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.socket.level

指定日志级别,由套接字日志记录器记录哪些消息级别

环境变量: QUARKUS_LOG_SOCKET_LEVEL

级别

ALL

quarkus.log.socket.filter

要链接到文件处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_SOCKET_FILTER

string

 

quarkus.log.socket.async.enabled

是否异步记录

环境变量: QUARKUS_LOG_SOCKET_ASYNC_ENABLED

布尔值

false

quarkus.log.socket.async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_SOCKET_ASYNC_QUEUE_LENGTH

int

512

quarkus.log.socket.async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_SOCKET_ASYNC_OVERFLOW

丢弃

block

Console handlers

类型

default

quarkus.log.handler.console."console-handlers".enabled

如果应该启用控制台日志记录

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS_ENABLED

布尔值

true

quarkus.log.handler.console."console-handlers".stderr

如果控制台日志记录应该进入 System#err,而不是 System#out

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__STDERR

布尔值

false

quarkus.log.handler.console."console-handlers".format

日志格式。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS_FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.handler.console."console-handlers".level

控制台日志级别。

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS_LEVEL

级别

ALL

quarkus.log.handler.console."console-handlers".darken

指定颜色应隐藏的数量。请注意,如果扩展存在控制控制台格式的扩展(如 XML 或 JSON 格式的扩展),则此值将被忽略。

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__DARKEN

int

0

quarkus.log.handler.console."console-handlers".filter

链接到控制台处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS_FILTER

string

 

quarkus.log.handler.console."console-handlers".async.enabled

是否异步记录

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ASYNC_ENABLED

布尔值

false

quarkus.log.handler.console."console-handlers".async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ASYNC_QUEUE_LENGTH

int

512

quarkus.log.handler.console."console-handlers".async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ASYNC_OVERFLOW

丢弃

block

File handlers

类型

default

quarkus.log.handler.file."file-handlers".enabled

如果应该启用文件日志记录

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS_ENABLED

布尔值

false

quarkus.log.handler.file."file-handlers".format

日志格式

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %h %N[%i] %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.handler.file."file-handlers".level

要写入文件的日志级别。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__LEVEL

级别

ALL

quarkus.log.handler.file."file-handlers".path

将在其中写入日志的文件名。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS_PATH

File

quarkus.log

quarkus.log.handler.file."file-handlers".filter

要链接到文件处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_HANDLER_FILE_FILE_HANDLERS__FILTER

string

 

quarkus.log.handler.file."file-handlers".encoding

使用的字符编码

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ENCODING

charset

 

quarkus.log.handler.file."file-handlers".async.enabled

是否异步记录

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ASYNC_ENABLED

布尔值

false

quarkus.log.handler.file."file-handlers".async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ASYNC_QUEUE_LENGTH

int

512

quarkus.log.handler.file."file-handlers".async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ASYNC_OVERFLOW

丢弃

block

quarkus.log.handler.file."file-handlers".rotation.enabled

是否启用日志轮转。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_ENABLED

布尔值

true

quarkus.log.handler.file."file-handlers".rotation.max-file-size

执行轮转后的最大日志文件大小,最高为 Long.MAX_VALUE 字节。请注意,在写入日志记录 ,该文件会被轮转。因此,这并不是文件大小硬最大,而是在轮转文件前,对文件的大小进行硬性。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_MAX_FILE_SIZE

MemorySize HEKETI MemorySize 格式

10M

quarkus.log.handler.file."file-handlers".rotation.max-backup-index

要保留的最大备份数。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_MAX_BACKUP_INDEX

int

5

quarkus.log.handler.file."file-handlers".rotation.file-suffix

文件处理程序轮转文件后缀。使用时,该文件将根据后缀进行轮转。

后缀必须采用 date-time 格式,它可以被 DateTimeFormatter 理解。

示例 fileSuffix: .yyyy-MM-dd

注: 如果后缀以 .zip 或 .gz 结尾,则轮转文件也会被压缩。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_FILE_SUFFIX

string

 

quarkus.log.handler.file."file-handlers".rotation.rotate-on-boot

指明是否在服务器初始化时轮转日志文件。

您需要设置 max-file-size 或配置 file-suffix 以便它正常工作。

环境变量: QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_ROTATE_ON_BOOT

布尔值

true

Syslog handlers

类型

default

quarkus.log.handler.syslog."syslog-handlers".enabled

如果应启用 syslog 日志记录

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS_ENABLED

布尔值

false

quarkus.log.handler.syslog."syslog-handlers".endpoint

Syslog 服务器的 IP 地址和端口

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS_ENDPOINT

host:port

localhost:514

quarkus.log.handler.syslog."syslog-handlers".app-name

使用 RFC5424 格式格式化消息时使用的应用程序名称

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__APP_NAME

string

 

quarkus.log.handler.syslog."syslog-handlers".hostname

从其中发送消息的主机的名称

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS_HOSTNAME

string

 

quarkus.log.handler.syslog."syslog-handlers".facility

设置计算 RFC-5424 和 RFC-3164 定义的消息优先级时使用的工具

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__FACILITY

kernel,用户级,mail-system,system-daemons,security,syslogd,line-printer,network-news,uucp,clock-daemon,security2,ftp-daemon,ntp,log-audit,log-alert,clock-daemon2,local-use-0, local-use-0 ,local-use-1,local-use-2,local-use-3,local-use-4 , local-use -5, local-use- 6, local-use-7

用户级别

quarkus.log.handler.syslog."syslog-handlers".syslog-type

设置 SyslogType syslog 类型 此处理程序应该用来格式化发送的消息

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__SYSLOG_TYPE

rfc5424, rfc3164

rfc5424

quarkus.log.handler.syslog."syslog-handlers".protocol

设置用于连接 Syslog 服务器的协议

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__PROTOCOL

TCP,udp,ssl-tcp

tcp

quarkus.log.handler.syslog."syslog-handlers".use-counting-framing

如果启用,则发送的消息将以消息的大小作为前缀

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__USE_COUNTING_FRAMING

,false,协议独立

protocol-dependent

quarkus.log.handler.syslog."syslog-handlers".truncate

设置为 true 会在超过最大长度时截断消息

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__TRUNCATE

布尔值

true

quarkus.log.handler.syslog."syslog-handlers".block-on-reconnect

启用或禁用在尝试重新连接 Protocol#TCP TCPProtocol#SSL_TCP SSL TCP 协议时的阻塞

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__BLOCK_ON_RECONNECT

布尔值

false

quarkus.log.handler.syslog."syslog-handlers".format

日志消息格式

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS_FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.handler.syslog."syslog-handlers".level

指定 Syslog 日志记录器记录哪些消息级别的日志级别

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS_LEVEL

级别

ALL

quarkus.log.handler.syslog."syslog-handlers".filter

要链接到文件处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS_FILTER

string

 

quarkus.log.handler.syslog."syslog-handlers".max-length

允许发送的消息的最大长度(以字节为单位),最多 Integer.MAX_VALUE 字节。长度包括标头和消息。

如果没有设置,当 sys-log-type 为 rfc5424 时,如果 sys-log-type 为 rfc3164,则默认值为 1024,当 sys-log-typerfc3164时,默认值为 1024

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__MAX_LENGTH

MemorySize HEKETI MemorySize 格式

 

quarkus.log.handler.syslog."syslog-handlers".async.enabled

是否异步记录

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ASYNC_ENABLED

布尔值

false

quarkus.log.handler.syslog."syslog-handlers".async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ASYNC_QUEUE_LENGTH

int

512

quarkus.log.handler.syslog."syslog-handlers".async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ASYNC_OVERFLOW

丢弃

block

Socket handlers

类型

default

quarkus.log.handler.socket."socket-handlers".enabled

如果应该启用套接字日志记录

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS_ENABLED

布尔值

false

quarkus.log.handler.socket."socket-handlers".endpoint

接收日志的服务器的 IP 地址和端口

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS_ENDPOINT

host:port

localhost:4560

quarkus.log.handler.socket."socket-handlers".protocol

设置用于连接 syslog 服务器的协议

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__PROTOCOL

TCP,udp,ssl-tcp

tcp

quarkus.log.handler.socket."socket-handlers".block-on-reconnect

启用或禁用在尝试重新连接 Protocol#TCP TCPProtocol#SSL_TCP SSL TCP 协议时的阻塞

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__BLOCK_ON_RECONNECT

布尔值

false

quarkus.log.handler.socket."socket-handlers".format

日志消息格式

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__FORMAT

string

%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n

quarkus.log.handler.socket."socket-handlers".level

指定日志级别,由套接字日志记录器记录哪些消息级别

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS_LEVEL

级别

ALL

quarkus.log.handler.socket."socket-handlers".filter

要链接到文件处理程序的过滤器的名称。

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS_FILTER

string

 

quarkus.log.handler.socket."socket-handlers".async.enabled

是否异步记录

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ASYNC_ENABLED

布尔值

false

quarkus.log.handler.socket."socket-handlers".async.queue-length

刷新写入前使用的队列长度

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ASYNC_QUEUE_LENGTH

int

512

quarkus.log.handler.socket."socket-handlers".async.overflow

确定在队列满时是否阻止发布者(而不是丢弃消息)

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ASYNC_OVERFLOW

丢弃

block

Log cleanup filters - 内部使用

类型

default

quarkus.log.filter."filters".if-starts-with

要匹配的消息前缀

环境变量: QUARKUS_LOG_FILTER__FILTERS__IF_STARTS_WITH

字符串列表

继承

quarkus.log.filter."filters".target-level

过滤的消息的新日志级别。默认值为 DEBUG。

环境变量: QUARKUS_LOG_FILTER__FILTERS__TARGET_LEVEL

级别

DEBUG

关于 MemorySize 格式

大小配置选项以这种格式识别字符串(显示为正则表达式): [0-9]+[KkMmGgTtPpEeZzYy]?.

如果未指定后缀,则假定为字节。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat