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 支持由支持的应用程序日志记录框架使用的所有日志级别。从最低到最高最常用的日志级别为 TRACE
、DEBUG
、INFO
、WARN
、ERROR
和 FATAL
。
日志类别和处理程序使用日志级别来限制它们所负责的消息。每个日志级别都有一个数字值,它指示其相对于其他日志级别的顺序。日志类别和处理程序被分配一个日志级别,它们仅处理该级别或更高级别的日志消息。例如,带有 WARN 级别 WARN
的日志处理程序将仅记录级别 WARN
、ERROR
和 FATAL
的信息。
支持的日志级别
日志级别 | 值 | 描述 |
---|---|---|
ALL | Integer.MIN_VALUE | 提供所有日志消息。 |
FINEST | 300 | - |
FINER | 400 | - |
TRACE | 400 |
|
DEBUG | 500 |
|
FINE | 500 | - |
CONFIG | 700 | - |
INFO | 800 |
|
WARN | 900 |
|
WARNING | 900 | - |
ERROR | 1000 |
|
严重 | 1000 | - |
FATAL | 1100 |
|
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 |
当前日期/时间( |
%r | 相对时间(日志初始化后的毫秒)。 |
%z |
时区,必须在日期前指定( |
%k | 日志资源密钥(用于本地化日志消息)。 |
%m | 日志消息(包括异常追踪)。 |
%s | 简单的日志消息(没有异常追踪)。 |
%e | 异常堆栈追踪(没有扩展模块信息)。 |
%E | 异常堆栈追踪(带有扩展模块信息)。 |
%t | 当前线程的名称。 |
%n | 换行符。 |
%C | 调用日志方法(slow)的代码类。 |
%F | 类的文件名调用日志方法(slow)。 |
%l | 调用日志方法(slow)的代码的源位置。 |
%L | 调用日志方法(slow)的代码行号。 |
%M | 调用日志方法(slow)的代码方法。 |
%x | 嵌套的诊断上下文. |
%X | 消息诊断上下文. |
%% |
字面百分比( |
12.3.6. 过滤表达式
使用 filter-spec
属性配置的过滤器表达式用于根据各种条件记录日志消息。过滤器检查总是在原始未格式化的消息上完成。您可以包含日志记录器或处理程序的过滤器,但 logger 过滤器优先于处理程序上的过滤器。
为根日志记录器指定的 filter-spec
不会由其他日志记录器继承。相反,每个处理程序必须指定 filter-spec
。
过滤表达式 | 描述 |
---|---|
accept | 接受所有日志消息。 |
deny | 拒绝所有日志消息。 |
not[filter expression] | 返回单个过滤器表达式的数值。例如:
|
all[filter expression] | 从以逗号分隔的过滤器表达式列表中返回串联值。例如:
|
any[filter expression] | 从以逗号分隔的过滤器表达式列表中返回一个值。例如:
|
levelChange[level] | 使用指定级别更新日志记录。例如:
|
levels[levels] | 使用以逗号分隔的级别列表中列出的级别过滤日志消息。例如:
|
levelRange[minLevel,maxLevel] |
过滤指定级别范围内的日志消息。
|
match["pattern"] | 使用提供的正则表达式过滤日志消息。例如:
|
substitute["pattern","replacement value"] | 使用替换文本(秒参数)替换第一个匹配项的过滤器(第一个参数)。例如:
|
substituteAll["pattern","replacement value"] | 将模式(第一个参数)的所有匹配项替换为替换文本(秒参数)的过滤器。例如:
|
在使用管理 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 部分。