12.3. 关于 Logging 子系统


JBoss EAP logging 子系统使用 日志类别和 日志处理程序 的系统进行配置。日志类别定义要捕获的消息。日志处理程序定义如何处理这些消息,例如写入磁盘或发送到控制台。

日志记录配置集 允许创建唯一命名的日志配置集,并分配给独立于任何其他日志记录配置的应用程序。日志记录配置集的配置与主日志记录子系统几乎相同。

12.3.1. 根日志记录器

JBoss EAP 根日志记录器捕获指定日志级别或更高日志级别的所有日志消息,发送到不是由日志类别捕获的服务器。

默认情况下,根日志记录器配置为使用控制台和一个定期日志处理程序。定期日志处理程序配置为写入 server.log 文件。此文件通常被称为服务器日志。

如需更多信息 ,请参阅配置根 日志。

12.3.2. Log Categories

日志类别定义要捕获的一组日志消息,以及处理消息的一个或多个日志处理程序。

要捕获的日志消息由原始和日志级别的指定 Java 软件包定义。来自该软件包和该日志级别或更高日志级别中的类的消息由日志类别捕获,并发送到指定的日志处理程序。

注意

虽然日志类别通常是 Java 软件包和类名称,但可以是 Logger.getLogger (LOGGER_NAME) 方法指定的任何名称。

日志类别可以选择使用根日志记录器的日志处理程序,而不是其自身的处理程序。

如需更多信息 ,请参阅配置 日志条目。

12.3.3. 日志处理程序

日志处理程序定义如何记录捕获的日志消息。可用的日志处理程序类型是 控制台文件定期大小定期大小syslog自定义async

注意

日志处理程序必须添加至至少一个日志记录器才能激活。

日志处理程序类型
控制台(Console)
控制台日志处理程序将日志消息写入主机操作系统的标准输出(stdout)或标准错误(stderr)流。当 JBoss EAP 从命令行提示符运行时,将显示这些消息。来自控制台日志处理程序的消息不会被保存,除非操作系统被配置为捕获标准输出或标准错误流。
File
文件日志处理程序将日志消息写入指定文件。
periodic
定期日志处理程序将日志消息写入命名文件,直到指定的时间段已过。传递了时间段后,该文件将通过附加指定的时间戳来重命名,处理程序将继续写入具有原始名称的新创建的日志文件。
Size
大小日志处理程序将日志消息写入命名文件,直到文件达到指定大小。当文件达到指定大小时,使用数字后缀重命名,处理程序将继续写入具有原始名称的新创建的日志文件。每个大小日志处理程序必须以这种方式指定要保留的最大文件数。
定期大小

定期大小日志处理程序将日志消息写入命名文件,直到文件达到指定大小或指定时间段已过。然后,该文件被重命名,处理程序将继续写入具有原始名称的新创建的日志文件。

这是定期和大小日志处理程序的组合,并支持它们的组合属性。

Syslog
syslog 处理程序可用于发送消息到远程日志记录服务器。这允许多个应用将其日志消息发送到同一服务器,其中所有应用程序都可以被解析。
Custom
自定义日志处理程序允许您配置已实施的新日志处理程序。自定义处理程序必须实施为扩展 java.util.logging.Handler 的 Java 类,并包含在模块中。您还可以使用 Log4J appender 作为自定义日志处理程序。
Async
async 日志处理程序是一个 wrapper 日志处理程序,它为一个或多个其他日志处理程序提供异步行为。这对可能具有高延迟或其他性能问题的日志处理程序很有用,如将日志文件写入网络文件系统等。

有关配置这些日志处理程序的详情,请参考 配置日志处理程序部分

12.3.4. 日志级别

日志级别是一个枚举的值,表示日志消息的性质和严重性。作为开发者,您可以使用您选择的日志记录框架的适当方法指定给定日志消息的级别来发送消息。

JBoss EAP 支持由支持的应用程序日志记录框架使用的所有日志级别。从最低到最高最常用的日志级别为 TRACEDEBUGINFOWARNERRORFATAL

日志类别和处理程序使用日志级别来限制它们所负责的消息。每个日志级别都有一个数字值,它指示其相对于其他日志级别的顺序。日志类别和处理程序被分配一个日志级别,它们仅处理该级别或更高级别的日志消息。例如,带有 WARN 级别 WARN 的日志处理程序将仅记录级别 WARNERRORFATAL 的信息。

支持的日志级别
日志级别描述

ALL

Integer.MIN_VALUE

提供所有日志消息。

FINEST

300

-

FINER

400

-

TRACE

400

TRACE 级别日志消息提供有关应用运行状态的详细信息,通常仅在调试期间捕获。

DEBUG

500

DEBUG 级别日志消息表示单个请求或应用活动的进度,通常仅在调试过程中捕获。

FINE

500

-

CONFIG

700

-

INFO

800

INFO 级别日志消息表示应用程序的整体进度。通常用于应用程序启动、关闭和其他主要生命周期事件。

WARN

900

WARN 级别日志消息表示不是出错的情况,但不被视为理想情况。WARN 日志消息可以指示将来可能导致错误的情况。

WARNING

900

-

ERROR

1000

ERROR 级别日志消息表示发生了错误,可能会妨碍当前活动或请求完成,但不会阻止应用运行。

严重

1000

-

FATAL

1100

FATAL 级别日志消息表示可能导致关键服务失败和应用程序关闭的事件,并可能导致 JBoss EAP 关闭。

OFF

Integer.MAX_VALUE

不显示任何日志消息。

注意

ALL 是最低的日志级别,包含所有日志级别的信息。这提供了大多数日志记录。

FATAL 是最高日志级别,仅包含该级别的信息。这提供了最少的日志记录量。

12.3.5. 日志格式

日志格式器定义来自该处理程序的日志消息的外观。它是使用基于 java.util.logging.Formatter 类的语法的字符串。

例如,默认配置使用以下日志格式字符串将消息记录到服务器日志: %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c](%t)%s%e%n。这将创建类似以下的日志消息。

2016-03-18 15:49:32,075 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990

有关配置日志格式器的更多信息,请参阅配置指定模式 格式或 配置自定义日志格式 器。

下表列出了日志格式字符串中使用的语法。

日志格式语法
符号描述

%c

日志记录事件的类别。

%p

日志条目的级别(INFO、DEBUG 等)。

%P

日志条目的本地化级别。

%d

当前日期/时间(yyyy-MM-dd HH:mm:ss,SSS 格式)。

%r

相对时间(日志初始化后的毫秒)。

%z

时区,必须在日期前指定(%d)。例如,%z{GMT}%d{HH:mm:ss,SSS}

%k

日志资源密钥(用于本地化日志消息)。

%m

日志消息(包括异常追踪)。

%s

简单的日志消息(没有异常追踪)。

%e

异常堆栈追踪(没有扩展模块信息)。

%E

异常堆栈追踪(带有扩展模块信息)。

%t

当前线程的名称。

%n

换行符。

%C

调用日志方法(slow)的代码类。

%F

类的文件名调用日志方法(slow)。

%l

调用日志方法(slow)的代码的源位置。

%L

调用日志方法(slow)的代码行号。

%M

调用日志方法(slow)的代码方法。

%x

嵌套的诊断上下文.

%X

消息诊断上下文.

%%

字面百分比(%)字符(escaping)。

12.3.6. 过滤表达式

使用 filter-spec 属性配置的过滤器表达式用于根据各种条件记录日志消息。过滤器检查总是在原始未格式化的消息上完成。您可以包含日志记录器或处理程序的过滤器,但 logger 过滤器优先于处理程序上的过滤器。

注意

为根日志记录器指定的 filter-spec 不会由其他日志记录器继承。相反,每个处理程序必须指定 filter-spec

表 12.3. 日志过滤表达式
过滤表达式描述

accept

接受所有日志消息。

deny

拒绝所有日志消息。

not[filter expression]

返回单个过滤器表达式的数值。例如:

not(match("WFLY"))

all[filter expression]

从以逗号分隔的过滤器表达式列表中返回串联值。例如:

all (match ("WFLY"),match ("WELD"))

any[filter expression]

从以逗号分隔的过滤器表达式列表中返回一个值。例如:

any(match("WFLY"),match("WELD"))

levelChange[level]

使用指定级别更新日志记录。例如:

levelChange(WARN)

levels[levels]

使用以逗号分隔的级别列表中列出的级别过滤日志消息。例如:

levels (DEBUG,INFO,WARN,ERROR)

levelRange[minLevel,maxLevel]

过滤指定级别范围内的日志消息。[] 字符用于指定包含级别。() 字符用于指示专用级别。例如:

  • levelRange[INFO,ERROR]

    • 最小级别必须大于或等于 INFO,最大级别必须小于或等于 ERROR
  • levelRange[DEBUG,ERROR)

    • 最小级别必须大于或等于 DEBUG,最大级别必须小于 ERROR

match["pattern"]

使用提供的正则表达式过滤日志消息。例如:

match("WFLY\d+")

substitute["pattern","replacement value"]

使用替换文本(秒参数)替换第一个匹配项的过滤器(第一个参数)。例如:

substitute("WFLY","EAP")

substituteAll["pattern","replacement value"]

将模式(第一个参数)的所有匹配项替换为替换文本(秒参数)的过滤器。例如:

substituteAll("WFLY","EAP")

注意

在使用管理 CLI 配置过滤器表达式时,请务必在过滤文本中转义逗号和引号,以便该值作为字符串正确处理。您必须以逗号和引号前加上反斜杠(\),并将整个表达式嵌套在引号中。以下是一个示例,它正确转义 替换了All ("WFLY","YLFW")

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=filter-spec, value="substituteAll(\"WFLY\"\,\"YLFW\")")

12.3.7. 隐式日志记录依赖项

默认情况下,JBoss EAP logging 子系统为部署添加隐式日志记录 API 依赖项。您可以使用 add-logging-api-dependencies 属性来控制这些隐式依赖项是否添加到部署中,默认为 true

使用管理 CLI,您可以将 add-logging-api-dependencies 属性设置为 false,以便将隐式日志记录 API 依赖项添加到部署中。

/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)

有关 logging 子系统的隐式依赖项的信息,请参阅 JBoss EAP 开发指南中的 Implicit Module Dependencies 部分。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.