编辑此页面

日志配置

了解在 Quarkus 中使用日志 API、配置日志输出以及使用日志适配器统一来自其他日志 API 的输出。

本文档是 Quarkus 可观察性参考指南的一部分,该指南介绍了此组件和其他可观察性相关组件。

Quarkus 使用 JBoss Log Manager 日志后端来发布应用程序和框架日志。Quarkus 支持 JBoss Logging API 和多个其他日志 API,它们与 JBoss Log Manager 无缝集成。您可以使用任何以下 API

使用 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";
    }
}
虽然 JBoss Logging 将日志消息直接路由到 JBoss Log Manager 中,但您的库之一可能依赖于不同的日志 API。在这种情况下,您需要使用日志适配器以确保其日志消息也路由到 JBoss Log Manager。

获取应用程序记录器

要在 Quarkus 中获取应用程序记录器,请选择以下方法之一。

声明记录器字段

使用这种经典方法,您可以使用特定的 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)
    }
}
1 定义记录器字段。
2 log 对象上调用所需的日志记录方法。

简化的日志记录

Quarkus 通过自动向使用 io.quarkus.logging.Log 的类添加记录器字段来简化日志记录。这消除了对重复样板代码的需求,并增强了日志记录设置的便利性。

使用静态方法调用简化日志记录的示例
package com.example;

import io.quarkus.logging.Log; (1)

class MyService { (2)
    public void doSomething() {
        Log.info("Simple!"); (3)
    }
}
1 io.quarkus.logging.Log 类包含与 JBoss Logging 相同的方法,只是它们是 static
2 请注意,该类没有声明记录器字段。这是因为在应用程序构建期间,会在每个使用 Log API 的类中自动创建一个 private static final org.jboss.logging.Logger 字段。调用 Log 方法的类的完全限定名称用作记录器名称。在此示例中,记录器名称将为 com.example.MyService
3 最后,所有对 Log 方法的调用在应用程序构建期间都会被重写为记录器字段上的常规 JBoss Logging 调用。

仅在应用程序类中使用 Log API,而不要在外部依赖项中使用。在构建时未由 Quarkus 处理的 Log 方法调用将导致异常。

在扩展中使用 io.quarkus.logging.Log

虽然 Log API 简化了应用程序类中的日志记录,但不建议在扩展模块或外部依赖项中使用它。

以下注意事项适用

  • io.quarkus.logging.Log 依赖于构建时发生的 Quarkus 字节码转换。

  • 在扩展模块中,Log 仅在模块包含 Jandex 索引时才有效。但是,此行为不受支持,并且可能导致不可靠的日志记录。

    对于扩展开发,请使用 org.jboss.logging.Logger.getLogger(String) 而不是 io.quarkus.logging.Log

注入配置的记录器

使用 @Inject 注释注入配置的 org.jboss.logging.Logger 记录器实例是添加应用程序记录器的另一种方法,但仅适用于 CDI bean。

您可以使用 @Inject Logger log,其中记录器以您注入它的类命名,或者使用 @LoggerName("…​") Logger log,其中记录器将收到指定的名称。请注意,如果您已经使用 @LoggerName("…​") 注释了您的 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!");
   }
}
1 声明类的完全限定类名 (FQCN) 用作记录器名称,例如,将使用 org.jboss.logging.Logger.getLogger(SimpleBean.class)
2 在这种情况下,名称 *foo* 用作记录器名称,例如,将使用 org.jboss.logging.Logger.getLogger("foo")

记录器实例在内部缓存。因此,当记录器被注入到例如 @RequestScoped bean 中时,它将在所有 bean 实例之间共享,以避免与记录器实例化相关的可能的性能损失。

使用日志级别

Quarkus 提供了不同的日志级别,这有助于开发人员根据事件的严重性来控制记录的信息量。

可用的日志级别
OFF

一种特殊级别,用于在配置中关闭日志记录。

FATAL

严重的服务故障或完全无法处理任何请求。

ERROR

处理中的主要问题或无法完成请求。

WARN

非严重的服务错误或可能不需要立即纠正的问题。

INFO

服务生命周期事件或其他重要的不频繁信息。

DEBUG

有关生命周期事件或其他与特定请求无关的事件的其他信息,对调试很有用。

TRACE

详细的每个请求的调试信息,可能具有非常高的频率。

ALL

一种特殊级别,用于打开所有消息的日志记录,包括自定义级别。

您还可以为使用 java.util.logging 的应用程序和库配置以下级别

SEVERE

ERROR 相同。

WARNING

WARN 相同。

CONFIG

服务配置信息。

FINE

DEBUG 相同。

FINER

TRACE 相同。

FINEST

TRACE 相比,增加了调试输出,可能具有更高的频率。

表 1. 级别之间的映射
数值级别值 标准级别名称 等效的 java.util.logging (JUL) 级别名称

1100

FATAL

不适用

1000

ERROR

SEVERE

900

WARN

WARNING

800

INFO

INFO

700

不适用

CONFIG

500

DEBUG

FINE

400

TRACE

FINER

300

不适用

FINEST

配置日志级别、类别和格式

集成到 Quarkus 中的 JBoss Logging 通过单个配置文件为所有支持的日志 API 提供统一的配置,该配置文件设置所有可用的扩展。要调整运行时日志记录,请修改 application.properties 文件。

以下示例说明如何将默认日志级别设置为 INFO 日志记录并包括 Hibernate DEBUG 日志
quarkus.log.level=INFO
quarkus.log.category."org.hibernate".level=DEBUG

当您将日志级别设置为低于 DEBUG 时,您还必须调整最小日志级别。此设置可以全局应用,使用 quarkus.log.min-level 配置属性,也可以按类别应用

quarkus.log.category."org.hibernate".min-level=TRACE

这将为 Quarkus 需要生成支持代码的级别设置一个下限。必须在构建时设置最小日志级别,以便 Quarkus 可以打开优化机会的大门,在这些机会中,可以省略不可用级别上的日志记录。

来自本机执行的示例

INFO 设置为最小日志记录级别会将较低级别的检查(例如 isTraceEnabled)设置为 false。这将标识永远不会执行的代码,例如 if(logger.isDebug()) callMethod();,并将其标记为“死代码”。

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

-Dquarkus.log.category.\"org.hibernate\".level=TRACE

所有可能的属性都在日志配置参考部分中列出。

日志类别

日志记录是按类别配置的,每个类别都是独立配置的。类别的配置以递归方式应用于所有子类别,除非存在更具体的子类别配置。

所有日志类别的父类别称为“根类别”。作为最终父类别,此类别可能包含全局应用于所有其他类别的配置。这包括全局配置的处理程序和格式化程序。

示例 1. 全局配置示例,该配置应用于所有类别
quarkus.log.handlers=con,mylog

quarkus.log.handler.console.con.enable=true
quarkus.log.handler.file.mylog.enable=true

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

示例 2. 每个类别的配置示例
quarkus.log.category."org.apache.kafka.clients".level=INFO
quarkus.log.category."org.apache.kafka.common.utils".level=INFO

此示例说明如何在类别 org.apache.kafka.clientsorg.apache.kafka.common.utils 上配置最小日志级别。

有关更多信息,请参见日志配置参考

如果您想为特定类别配置一些额外的东西,请创建一个命名处理程序,例如 quarkus.log.handler.[console|file|syslog].<your-handler-name>.*,并通过使用 quarkus.log.category.<my-category>.handlers 为该类别设置它。

一个用例可能是希望为保存到文件的日志消息使用与其他处理程序使用的格式不同的时间戳格式。

有关进一步演示,请参见将命名处理程序附加到类别示例的输出。

属性名称 默认 描述

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

INFO [1]

用于配置名为 <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 [2]

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

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

根记录器配置

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

属性名称 默认 描述

quarkus.log.level

INFO

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

quarkus.log.min-level

DEBUG

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

  • 如果给定记录器类别不存在级别配置,则会检查父类别。

  • 如果没有为类别及其任何父类别提供特定的配置,则使用根记录器配置。

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

日志格式

Quarkus 使用基于模式的日志格式化程序,默认情况下生成人类可读的文本日志,但您也可以使用专用属性为每个日志处理程序配置格式。

对于控制台处理程序,该属性是 quarkus.log.console.format

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

符号 摘要 描述

%%

%

呈现一个简单的 % 字符。

%c

类别

呈现类别名称。

%C

源类

呈现源类名称。[3]

%d{xxx}

日期

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

%e

异常

呈现抛出的异常(如果有)。

%F

源文件

呈现源文件名。[3]

%h

主机名

呈现系统简单主机名。

%H

完全限定的主机名

呈现系统的完全限定主机名,根据操作系统配置,该名称可能与简单主机名相同。

%i

进程 ID

呈现当前进程 PID。

%l

源位置

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

%L

源行

呈现源行号。[3]

%m

完整消息

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

%M

源方法

呈现源方法名。[3]

%n

换行符

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

%N

进程名称

呈现当前进程的名称。

%p

级别

呈现消息的日志级别。

%r

相对时间

呈现自应用程序日志启动以来的时间(以毫秒为单位)。

%s

简单消息

仅呈现日志消息,不包含异常跟踪。

%t

线程名称

呈现线程名称。

%t{id}

线程 ID

呈现线程 ID。

%z{<zone name>}

时区

将输出的时区设置为 <zone name>

%X{<MDC property name>}

映射诊断上下文值

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

%X

映射诊断上下文值

{property.key=property.value} 格式呈现来自映射诊断上下文的所有值。

%x

嵌套诊断上下文值

{value1.value2} 格式呈现来自嵌套诊断上下文的所有值。

备用控制台日志格式

更改控制台日志格式很有用,例如,当 Quarkus 应用程序的控制台输出被服务捕获时,该服务会处理和存储日志信息以供以后分析。

JSON 日志格式

可以使用 quarkus-logging-json 扩展来添加对 JSON 日志格式及其相关配置的支持。

  1. 将此扩展添加到您的构建文件中,如下面的代码片段所示

    pom.xml
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-logging-json</artifactId>
    </dependency>
    build.gradle
    implementation("io.quarkus:quarkus-logging-json")

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

    对于某些人来说,在开发模式下使用人类可读的(非结构化)日志记录,并在生产模式下使用 JSON 日志记录(结构化)是有意义的。可以使用不同的配置文件来实现此目的,如下面的配置所示。

  2. 在 application.properties 中禁用开发和测试模式下的 JSON 日志记录

    %dev.quarkus.log.console.json.enabled=false
    %test.quarkus.log.console.json.enabled=false
配置

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

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

控制台日志记录

类型

默认

确定是否启用 JSON 控制台格式化扩展,该扩展禁用“普通”控制台格式化。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ENABLED

显示更多

布尔值

启用 JSON 记录的“漂亮打印”。请注意,某些 JSON 解析器将无法读取漂亮打印的输出。

环境变量: QUARKUS_LOG_CONSOLE_JSON_PRETTY_PRINT

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_CONSOLE_JSON_DATE_FORMAT

显示更多

字符串

default

要使用的特殊记录结束分隔符。默认情况下,使用换行符。

环境变量: QUARKUS_LOG_CONSOLE_JSON_RECORD_DELIMITER

显示更多

字符串

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

环境变量: QUARKUS_LOG_CONSOLE_JSON_ZONE_ID

显示更多

字符串

default

要指定的异常输出类型。

环境变量: QUARKUS_LOG_CONSOLE_JSON_EXCEPTION_OUTPUT_TYPE

显示更多

detailedformatteddetailed-and-formatted

detailed

启用在日志中打印更多详细信息。

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

环境变量: QUARKUS_LOG_CONSOLE_JSON_PRINT_DETAILS

显示更多

布尔值

false

使用自定义值覆盖键。省略此值表示将不应用任何键覆盖。

环境变量: QUARKUS_LOG_CONSOLE_JSON_KEY_OVERRIDES

显示更多

字符串

要从 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_CONSOLE_JSON_EXCLUDED_KEYS

显示更多

字符串列表

附加字段值。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

显示更多

字符串

必需

其他字段类型规范。支持的类型:stringintlong。如果未指定,则默认值为 String。

环境变量: QUARKUS_LOG_CONSOLE_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

显示更多

stringintlong

字符串

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_CONSOLE_JSON_LOG_FORMAT

显示更多

defaultecs

default

文件日志记录

类型

默认

确定是否启用 JSON 控制台格式化扩展,该扩展禁用“普通”控制台格式化。

环境变量: QUARKUS_LOG_FILE_JSON_ENABLED

显示更多

布尔值

启用 JSON 记录的“漂亮打印”。请注意,某些 JSON 解析器将无法读取漂亮打印的输出。

环境变量: QUARKUS_LOG_FILE_JSON_PRETTY_PRINT

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_FILE_JSON_DATE_FORMAT

显示更多

字符串

default

要使用的特殊记录结束分隔符。默认情况下,使用换行符。

环境变量: QUARKUS_LOG_FILE_JSON_RECORD_DELIMITER

显示更多

字符串

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

环境变量: QUARKUS_LOG_FILE_JSON_ZONE_ID

显示更多

字符串

default

要指定的异常输出类型。

环境变量: QUARKUS_LOG_FILE_JSON_EXCEPTION_OUTPUT_TYPE

显示更多

detailedformatteddetailed-and-formatted

detailed

启用在日志中打印更多详细信息。

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

环境变量: QUARKUS_LOG_FILE_JSON_PRINT_DETAILS

显示更多

布尔值

false

使用自定义值覆盖键。省略此值表示将不应用任何键覆盖。

环境变量: QUARKUS_LOG_FILE_JSON_KEY_OVERRIDES

显示更多

字符串

要从 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_FILE_JSON_EXCLUDED_KEYS

显示更多

字符串列表

附加字段值。

环境变量: QUARKUS_LOG_FILE_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

显示更多

字符串

必需

其他字段类型规范。支持的类型:stringintlong。如果未指定,则默认值为 String。

环境变量: QUARKUS_LOG_FILE_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

显示更多

stringintlong

字符串

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_FILE_JSON_LOG_FORMAT

显示更多

defaultecs

default

Syslog 日志记录

类型

默认

确定是否启用 JSON 控制台格式化扩展,该扩展禁用“普通”控制台格式化。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ENABLED

显示更多

布尔值

启用 JSON 记录的“漂亮打印”。请注意,某些 JSON 解析器将无法读取漂亮打印的输出。

环境变量: QUARKUS_LOG_SYSLOG_JSON_PRETTY_PRINT

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_SYSLOG_JSON_DATE_FORMAT

显示更多

字符串

default

要使用的特殊记录结束分隔符。默认情况下,使用换行符。

环境变量: QUARKUS_LOG_SYSLOG_JSON_RECORD_DELIMITER

显示更多

字符串

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

环境变量: QUARKUS_LOG_SYSLOG_JSON_ZONE_ID

显示更多

字符串

default

要指定的异常输出类型。

环境变量: QUARKUS_LOG_SYSLOG_JSON_EXCEPTION_OUTPUT_TYPE

显示更多

detailedformatteddetailed-and-formatted

detailed

启用在日志中打印更多详细信息。

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

环境变量: QUARKUS_LOG_SYSLOG_JSON_PRINT_DETAILS

显示更多

布尔值

false

使用自定义值覆盖键。省略此值表示将不应用任何键覆盖。

环境变量: QUARKUS_LOG_SYSLOG_JSON_KEY_OVERRIDES

显示更多

字符串

要从 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_SYSLOG_JSON_EXCLUDED_KEYS

显示更多

字符串列表

附加字段值。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

显示更多

字符串

必需

其他字段类型规范。支持的类型:stringintlong。如果未指定,则默认值为 String。

环境变量: QUARKUS_LOG_SYSLOG_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

显示更多

stringintlong

字符串

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_SYSLOG_JSON_LOG_FORMAT

显示更多

defaultecs

default

套接字日志记录

类型

默认

确定是否启用 JSON 控制台格式化扩展,该扩展禁用“普通”控制台格式化。

环境变量: QUARKUS_LOG_SOCKET_JSON_ENABLED

显示更多

布尔值

启用 JSON 记录的“漂亮打印”。请注意,某些 JSON 解析器将无法读取漂亮打印的输出。

环境变量: QUARKUS_LOG_SOCKET_JSON_PRETTY_PRINT

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_SOCKET_JSON_DATE_FORMAT

显示更多

字符串

default

要使用的特殊记录结束分隔符。默认情况下,使用换行符。

环境变量: QUARKUS_LOG_SOCKET_JSON_RECORD_DELIMITER

显示更多

字符串

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

环境变量: QUARKUS_LOG_SOCKET_JSON_ZONE_ID

显示更多

字符串

default

要指定的异常输出类型。

环境变量: QUARKUS_LOG_SOCKET_JSON_EXCEPTION_OUTPUT_TYPE

显示更多

detailedformatteddetailed-and-formatted

detailed

启用在日志中打印更多详细信息。

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

环境变量: QUARKUS_LOG_SOCKET_JSON_PRINT_DETAILS

显示更多

布尔值

false

使用自定义值覆盖键。省略此值表示将不应用任何键覆盖。

环境变量: QUARKUS_LOG_SOCKET_JSON_KEY_OVERRIDES

显示更多

字符串

要从 JSON 输出中排除的键。

环境变量: QUARKUS_LOG_SOCKET_JSON_EXCLUDED_KEYS

显示更多

字符串列表

附加字段值。

环境变量: QUARKUS_LOG_SOCKET_JSON_ADDITIONAL_FIELD__FIELD_NAME__VALUE

显示更多

字符串

必需

其他字段类型规范。支持的类型:stringintlong。如果未指定,则默认值为 String。

环境变量: QUARKUS_LOG_SOCKET_JSON_ADDITIONAL_FIELD__FIELD_NAME__TYPE

显示更多

stringintlong

字符串

指定生成的 JSON 的格式

环境变量: QUARKUS_LOG_SOCKET_JSON_LOG_FORMAT

显示更多

defaultecs

default

启用漂亮打印可能会导致某些处理器和 JSON 解析器失败。
打印详细信息可能很昂贵,因为这些值是从调用者检索的。这些详细信息包括源类名、源文件名、源方法名和源行号。

日志处理程序

日志处理程序是负责将日志事件发送给接收者的日志记录组件。Quarkus 包括几个不同的日志处理程序:控制台文件Syslog

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

控制台日志处理程序

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

  • 全局配置示例

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

    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

有关其配置的详细信息,请参见控制台日志记录配置参考。

文件日志处理程序

要将事件记录到应用程序主机上的文件中,请使用 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
  • 每个类别的配置示例

    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

有关其配置的详细信息,请参见文件日志记录配置参考。

Syslog 日志处理程序

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
  • 每个类别的配置示例

    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

有关其配置的详细信息,请参见Syslog 日志记录配置参考。

套接字日志处理程序

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

  • 全局配置示例

    quarkus.log.socket.enable=true
    quarkus.log.socket.endpoint=localhost:4560

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

向日志处理程序添加日志过滤器

日志处理程序(例如控制台日志处理程序)可以与过滤器链接,该过滤器确定是否应记录日志记录。

注册日志过滤器

  1. 使用 @io.quarkus.logging.LoggingFilter 注释实现 java.util.logging.Filterfinal 类,并设置 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);
        }
    }

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

    application.properties 中配置过滤器的示例
    my-filter.part=TEST
  2. 使用位于 application.properties 中的 filter 配置属性将过滤器附加到相应的处理程序

    quarkus.log.console.filter=my-filter

日志配置示例

以下示例显示了在 Quarkus 中配置日志记录的一些方法

控制台 DEBUG 日志记录,但 Quarkus 日志记录除外 (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 日志配置
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
由于我们没有更改根记录器,控制台日志仅包含 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
附加到根记录器的命名处理器
# 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

集中式日志管理

使用一个集中的位置,有效地收集、存储和分析来自应用程序的各种组件和实例的日志数据。

要将日志发送到诸如 Graylog、Logstash 或 Fluentd 之类的集中式工具,请参阅 Quarkus 集中式日志管理 指南。

OpenTelemetry 日志

您可以启用将所有追加器的日志条目发送到 OpenTelemetry 日志。

有关详细信息,请参阅 Quarkus OpenTelemetry 日志 指南。

@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>
1 确保使用 org.jboss.logmanager.LogManager
2 为所有日志类别启用调试日志记录。

对于 Gradle,将以下配置添加到 build.gradle 文件

test {
	systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}

另请参见 从 IDE 运行 @QuarkusTest

使用其他日志 API

Quarkus 依赖 JBoss Logging 库来满足所有日志记录需求。

假设您使用的库依赖于其他日志库,例如 Apache Commons Logging、Log4j 或 SLF4J。在这种情况下,请将它们从依赖项中排除,并使用 JBoss Logging 适配器之一。

在构建本机可执行文件时,这一点尤其重要,因为在编译本机可执行文件时,您可能会遇到与以下类似的问题

Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl

日志记录实现未包含在本机可执行文件中,但是您可以使用 JBoss Logging 适配器来解决此问题。

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

将日志记录适配器添加到您的应用程序

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

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

    对于 Quarkus 扩展的依赖项库,此步骤是不必要的,因为扩展会自动处理它。
    • Apache Commons Logging

      pom.xml
      <dependency>
          <groupId>org.jboss.logging</groupId>
          <artifactId>commons-logging-jboss-logging</artifactId>
      </dependency>
      build.gradle
      implementation("org.jboss.logging:commons-logging-jboss-logging")
    • Log4j

      pom.xml
      <dependency>
          <groupId>org.jboss.logmanager</groupId>
          <artifactId>log4j-jboss-logmanager</artifactId>
      </dependency>
      build.gradle
      implementation("org.jboss.logmanager:log4j-jboss-logmanager")
    • Log4j 2

      pom.xml
      <dependency>
          <groupId>org.jboss.logmanager</groupId>
          <artifactId>log4j2-jboss-logmanager</artifactId>
      </dependency>
      build.gradle
      implementation("org.jboss.logmanager:log4j2-jboss-logmanager")

      不要包含任何 Log4j 依赖项,因为 log4j2-jboss-logmanager 库包含将 Log4j 用作日志记录实现所需的一切。

    • SLF4J

      pom.xml
      <dependency>
          <groupId>org.jboss.slf4j</groupId>
          <artifactId>slf4j-jboss-logmanager</artifactId>
      </dependency>
      build.gradle
      implementation("org.jboss.slf4j:slf4j-jboss-logmanager")
  2. 验证添加的库生成的日志是否符合与其他 Quarkus 日志相同的格式。

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

Quarkus 覆盖了日志记录映射诊断上下文(MDC),以提高与其反应式核心的兼容性。

添加和读取 MDC 数据

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

  1. 使用 MDC 类来设置数据。

    1. 添加 import 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!";
          }
      }
  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

    结果消息包含 MDC 数据

    08:48:13 INFO request.id=c37a3a36-b7f6-4492-83a1-de41dbc26fe2 request.path=/hello/test [me.sa.GreetingResourceJbossLogging] (executor-thread-1) request received

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)

MDC 传播

在 Quarkus 中,MDC 提供程序具有处理反应式上下文的特定实现,从而确保 MDC 数据在反应式和异步处理期间传播。

因此,您仍然可以在各种情况下访问 MDC 数据

  • 在异步调用之后,例如,当 REST 客户端返回 Uni 时。

  • 在提交给 org.eclipse.microprofile.context.ManagedExecutor 的代码中。

  • 在使用 vertx.executeBlocking() 执行的代码中。

如果适用,MDC 数据存储在复制的上下文中,这是一个用于处理单个任务或请求的隔离上下文。

日志配置参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

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

环境变量:QUARKUS_LOG_METRICS_ENABLED

显示更多

布尔值

false

默认的最小日志级别。

环境变量:QUARKUS_LOG_MIN_LEVEL

显示更多

级别

DEBUG

这将在开发模式下修饰堆栈跟踪,以显示导致异常的代码行

环境变量:QUARKUS_LOG_DECORATE_STACKTRACES

显示更多

布尔值

true

根类别的日志级别,用作所有类别的默认日志级别。<p> JBoss Logging 支持 Apache 样式的日志级别:<p> * {@link org.jboss.logmanager.Level#FATAL} * {@link org.jboss.logmanager.Level#ERROR} * {@link org.jboss.logmanager.Level#WARN} * {@link org.jboss.logmanager.Level#INFO} * {@link org.jboss.logmanager.Level#DEBUG} * {@link org.jboss.logmanager.Level#TRACE}

此外,它还支持标准 JDK 日志级别。

环境变量:QUARKUS_LOG_LEVEL

显示更多

级别

INFO

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

环境变量:QUARKUS_LOG_HANDLERS

显示更多

字符串列表

最低日志类别

类型

默认

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

要获得低于 DEBUG 的运行时日志记录(例如 TRACE),请在构建时调整最小级别。需要在运行时提供正确的日志级别。

例如,要获得 TRACE 日志记录,最小级别需要在 TRACE,并且运行时日志级别需要与之匹配。

环境变量:QUARKUS_LOG_CATEGORY__CATEGORIES__MIN_LEVEL

显示更多

InheritableLevel

继承

此类别的日志级别。

请注意,要获得低于 INFO 的日志级别,还需要调整最小级别构建时配置选项。

环境变量:QUARKUS_LOG_CATEGORY__CATEGORIES__LEVEL

显示更多

InheritableLevel

继承

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

环境变量:QUARKUS_LOG_CATEGORY__CATEGORIES__HANDLERS

显示更多

字符串列表

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

环境变量:QUARKUS_LOG_CATEGORY__CATEGORIES__USE_PARENT_HANDLERS

显示更多

布尔值

true

控制台日志

类型

默认

是否应启用控制台日志

环境变量:QUARKUS_LOG_CONSOLE_ENABLE

显示更多

布尔值

true

控制台日志是否应转到 System#err 而不是 System#out

环境变量:QUARKUS_LOG_CONSOLE_STDERR

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_CONSOLE_FORMAT

显示更多

字符串

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

控制台日志级别。

环境变量:QUARKUS_LOG_CONSOLE_LEVEL

显示更多

级别

ALL

指定应使颜色变暗多少。请注意,如果存在控制控制台格式的扩展(例如,XML 或 JSON 格式扩展),则将忽略此值。

环境变量:QUARKUS_LOG_CONSOLE_DARKEN

显示更多

整数

0

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

环境变量:QUARKUS_LOG_CONSOLE_FILTER

显示更多

字符串

指示是否异步记录日志

环境变量:QUARKUS_LOG_CONSOLE_ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_CONSOLE_ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量:QUARKUS_LOG_CONSOLE_ASYNC_OVERFLOW

显示更多

blockdiscard

block

文件日志

类型

默认

是否应启用文件日志

环境变量:QUARKUS_LOG_FILE_ENABLE

显示更多

布尔值

false

日志格式

环境变量:QUARKUS_LOG_FILE_FORMAT

显示更多

字符串

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

要写入文件的日志级别。

环境变量:QUARKUS_LOG_FILE_LEVEL

显示更多

级别

ALL

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

环境变量:QUARKUS_LOG_FILE_PATH

显示更多

文件

quarkus.log

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

环境变量:QUARKUS_LOG_FILE_FILTER

显示更多

字符串

使用的字符编码

环境变量:QUARKUS_LOG_FILE_ENCODING

显示更多

字符集

指示是否异步记录日志

环境变量:QUARKUS_LOG_FILE_ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_FILE_ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量:QUARKUS_LOG_FILE_ASYNC_OVERFLOW

显示更多

blockdiscard

block

是否启用日志轮换。

环境变量:QUARKUS_LOG_FILE_ROTATION_ENABLED

显示更多

布尔值

true

最大日志文件大小,超过该大小后执行轮换,最大为 Long.MAX_VALUE 字节。请注意,文件是在写入日志记录之后轮换的。因此,这并不是文件大小的硬性限制;相反,它是轮换之前文件大小的硬性最小值

环境变量:QUARKUS_LOG_FILE_ROTATION_MAX_FILE_SIZE

显示更多

MemorySize 

10M

要保留的最大备份数。

环境变量:QUARKUS_LOG_FILE_ROTATION_MAX_BACKUP_INDEX

显示更多

整数

5

文件处理程序轮换文件后缀。使用后,将根据其后缀轮换文件。

后缀必须是 DateTimeFormatter 可以理解的日期时间格式。

示例 fileSuffix: .yyyy-MM-dd

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

环境变量:QUARKUS_LOG_FILE_ROTATION_FILE_SUFFIX

显示更多

字符串

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

您需要设置 max-file-size 或配置 file-suffix 才能使其工作。

环境变量:QUARKUS_LOG_FILE_ROTATION_ROTATE_ON_BOOT

显示更多

布尔值

true

Syslog 日志

类型

默认

是否应启用 syslog 日志

环境变量:QUARKUS_LOG_SYSLOG_ENABLE

显示更多

布尔值

false

Syslog 服务器的 IP 地址和端口

环境变量:QUARKUS_LOG_SYSLOG_ENDPOINT

显示更多

host:port

localhost:514

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

环境变量:QUARKUS_LOG_SYSLOG_APP_NAME

显示更多

字符串

发送消息的主机的名称

环境变量:QUARKUS_LOG_SYSLOG_HOSTNAME

显示更多

字符串

设置设施,用于计算消息的优先级,如 RFC-5424 和 RFC-3164 定义

环境变量:QUARKUS_LOG_SYSLOG_FACILITY

显示更多

kerneluser-levelmail-systemsystem-daemonssecuritysyslogdline-printernetwork-newsuucpclock-daemonsecurity2ftp-daemonntplog-auditlog-alertclock-daemon2local-use-0local-use-1local-use-2local-use-3local-use-4local-use-5local-use-6local-use-7

user-level

设置此处理程序应用于格式化发送的消息的 SyslogType syslog type

环境变量:QUARKUS_LOG_SYSLOG_SYSLOG_TYPE

显示更多

rfc5424rfc3164

rfc5424

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

环境变量:QUARKUS_LOG_SYSLOG_PROTOCOL

显示更多

tcpudpssl-tcp

tcp

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

环境变量:QUARKUS_LOG_SYSLOG_USE_COUNTING_FRAMING

显示更多

truefalseprotocol-dependent

protocol-dependent

设置为 true 以截断消息(如果消息超过最大长度)

环境变量:QUARKUS_LOG_SYSLOG_TRUNCATE

显示更多

布尔值

true

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

环境变量:QUARKUS_LOG_SYSLOG_BLOCK_ON_RECONNECT

显示更多

布尔值

false

日志消息格式

环境变量:QUARKUS_LOG_SYSLOG_FORMAT

显示更多

字符串

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

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

环境变量:QUARKUS_LOG_SYSLOG_LEVEL

显示更多

级别

ALL

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

环境变量:QUARKUS_LOG_SYSLOG_FILTER

显示更多

字符串

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

如果未设置,则当 sys-log-typerfc5424(这是默认值)时,默认值为 2048,当 sys-log-typerfc3164 时,默认值为 1024

环境变量:QUARKUS_LOG_SYSLOG_MAX_LENGTH

显示更多

MemorySize 

指示是否异步记录日志

环境变量:QUARKUS_LOG_SYSLOG_ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_SYSLOG_ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量:QUARKUS_LOG_SYSLOG_ASYNC_OVERFLOW

显示更多

blockdiscard

block

套接字日志

类型

默认

是否应启用套接字日志

环境变量:QUARKUS_LOG_SOCKET_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_SOCKET_ENDPOINT

显示更多

host:port

localhost:4560

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

环境变量:QUARKUS_LOG_SOCKET_PROTOCOL

显示更多

tcpudpssl-tcp

tcp

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

环境变量:QUARKUS_LOG_SOCKET_BLOCK_ON_RECONNECT

显示更多

布尔值

false

日志消息格式

环境变量:QUARKUS_LOG_SOCKET_FORMAT

显示更多

字符串

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

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

环境变量:QUARKUS_LOG_SOCKET_LEVEL

显示更多

级别

ALL

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

环境变量:QUARKUS_LOG_SOCKET_FILTER

显示更多

字符串

指示是否异步记录日志

环境变量:QUARKUS_LOG_SOCKET_ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_SOCKET_ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量:QUARKUS_LOG_SOCKET_ASYNC_OVERFLOW

显示更多

blockdiscard

block

控制台处理程序

类型

默认

是否应启用控制台日志

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ENABLE

显示更多

布尔值

true

控制台日志是否应转到 System#err 而不是 System#out

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__STDERR

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__FORMAT

显示更多

字符串

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

控制台日志级别。

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__LEVEL

显示更多

级别

ALL

指定应使颜色变暗多少。请注意,如果存在控制控制台格式的扩展(例如,XML 或 JSON 格式扩展),则将忽略此值。

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__DARKEN

显示更多

整数

0

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

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__FILTER

显示更多

字符串

指示是否异步记录日志

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量:QUARKUS_LOG_HANDLER_CONSOLE__CONSOLE_HANDLERS__ASYNC_OVERFLOW

显示更多

blockdiscard

block

文件处理程序

类型

默认

是否应启用文件日志

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ENABLE

显示更多

布尔值

false

日志格式

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__FORMAT

显示更多

字符串

%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

显示更多

级别

ALL

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

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__PATH

显示更多

文件

quarkus.log

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

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__FILTER

显示更多

字符串

使用的字符编码

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ENCODING

显示更多

字符集

指示是否异步记录日志

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ASYNC_OVERFLOW

显示更多

blockdiscard

block

是否启用日志轮换。

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_ENABLED

显示更多

布尔值

true

最大日志文件大小,超过该大小后执行轮换,最大为 Long.MAX_VALUE 字节。请注意,文件是在写入日志记录之后轮换的。因此,这并不是文件大小的硬性限制;相反,它是轮换之前文件大小的硬性最小值

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_MAX_FILE_SIZE

显示更多

MemorySize 

10M

要保留的最大备份数。

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_MAX_BACKUP_INDEX

显示更多

整数

5

文件处理程序轮换文件后缀。使用后,将根据其后缀轮换文件。

后缀必须是 DateTimeFormatter 可以理解的日期时间格式。

示例 fileSuffix: .yyyy-MM-dd

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

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_FILE_SUFFIX

显示更多

字符串

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

您需要设置 max-file-size 或配置 file-suffix 才能使其工作。

环境变量:QUARKUS_LOG_HANDLER_FILE__FILE_HANDLERS__ROTATION_ROTATE_ON_BOOT

显示更多

布尔值

true

Syslog 处理程序

类型

默认

是否应启用 syslog 日志

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ENABLE

显示更多

布尔值

false

Syslog 服务器的 IP 地址和端口

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ENDPOINT

显示更多

host:port

localhost:514

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

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__APP_NAME

显示更多

字符串

发送消息的主机的名称

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__HOSTNAME

显示更多

字符串

设置设施,用于计算消息的优先级,如 RFC-5424 和 RFC-3164 定义

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__FACILITY

显示更多

kerneluser-levelmail-systemsystem-daemonssecuritysyslogdline-printernetwork-newsuucpclock-daemonsecurity2ftp-daemonntplog-auditlog-alertclock-daemon2local-use-0local-use-1local-use-2local-use-3local-use-4local-use-5local-use-6local-use-7

user-level

设置此处理程序应用于格式化发送的消息的 SyslogType syslog type

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__SYSLOG_TYPE

显示更多

rfc5424rfc3164

rfc5424

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

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__PROTOCOL

显示更多

tcpudpssl-tcp

tcp

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

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__USE_COUNTING_FRAMING

显示更多

truefalseprotocol-dependent

protocol-dependent

设置为 true 以截断消息(如果消息超过最大长度)

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__TRUNCATE

显示更多

布尔值

true

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

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__BLOCK_ON_RECONNECT

显示更多

布尔值

false

日志消息格式

环境变量:QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__FORMAT

显示更多

字符串

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

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

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__LEVEL

显示更多

级别

ALL

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

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__FILTER

显示更多

字符串

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

如果未设置,则当 sys-log-typerfc5424(这是默认值)时,默认值为 2048,当 sys-log-typerfc3164 时,默认值为 1024

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__MAX_LENGTH

显示更多

MemorySize 

指示是否异步记录日志

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量: QUARKUS_LOG_HANDLER_SYSLOG__SYSLOG_HANDLERS__ASYNC_OVERFLOW

显示更多

blockdiscard

block

Socket 处理程序

类型

默认

是否应启用套接字日志

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ENABLE

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ENDPOINT

显示更多

host:port

localhost:4560

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__PROTOCOL

显示更多

tcpudpssl-tcp

tcp

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__BLOCK_ON_RECONNECT

显示更多

布尔值

false

日志消息格式

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__FORMAT

显示更多

字符串

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

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__LEVEL

显示更多

级别

ALL

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__FILTER

显示更多

字符串

指示是否异步记录日志

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ASYNC_ENABLE

显示更多

布尔值

false

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ASYNC_QUEUE_LENGTH

显示更多

整数

512

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

环境变量: QUARKUS_LOG_HANDLER_SOCKET__SOCKET_HANDLERS__ASYNC_OVERFLOW

显示更多

blockdiscard

block

日志清理过滤器 - 内部使用

类型

默认

要匹配的消息前缀

环境变量: QUARKUS_LOG_FILTER__FILTERS__IF_STARTS_WITH

显示更多

字符串列表

继承

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

环境变量: QUARKUS_LOG_FILTER__FILTERS__TARGET_LEVEL

显示更多

级别

DEBUG

关于 MemorySize 格式

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

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


1. 一些扩展可能会为某些类别定义自定义的默认日志级别,以默认减少日志噪音。在配置中设置日志级别将覆盖任何扩展定义的日志级别。
2. 默认情况下,配置的类别会附加与根记录器相同的处理程序。
3. 检查调用者信息的格式序列可能会影响性能

相关内容