第 12 章 JBoss EAP 的日志

JBoss EAP 提供了高度可配置的日志功能,它既可用于内部使用,也可用于部署的应用程序。logging 子系统基于 JBoss LogManager,并支持 JBoss Logging 之外的几个第三方的应用程序日志框架。

12.1. 关于服务器日志

12.1.1. 服务器日志

在默认情况下,所有的 JBoss EAP 日志条目都会写入 server.log 文件。这个文件的位置取决于操作模式。

  • 独立服务器:EAP_HOME/standalone/log/server.log
  • 受管域:EAP_HOME/domain/servers/SERVER_NAME/log/server.log

这个文件通常被称为服务器日志。详情请参考 Root Logger 一节。

12.1.2. 引导日志

在引导期间,JBoss EAP 记录关于 Java 环境和每个服务启动的日志信息。这个日志可用于故障解除。在默认情况下,所有的日志条目都被写入 server log

引导日志配置是在 logging.properties 文件里进行配置的,它在 JBoss EAP logging 子系统启动并接管后才会处于活动状态。这个文件的位置取决于您的操作模式。

  • 独立服务器:EAP_HOME/standalone/configuration/logging.properties
  • 受管域:

    域控制器和每台服务器都有一个 logging.properties 文件。

    • 域控制器:EAP_HOME/domain/configuration/logging.properties
    • 服务器:EAP_HOME/domain/servers/SERVER_NAME/data/logging.properties
警告

我们推荐您不要直接编辑 logging.properties 文件,除非是用于特殊的情况。在进行编辑之前,我们推荐您通过红帽客户门户网站开一个问题单。

logging.properties 文件的手动修改在启动时会被覆盖。

12.1.2.1. 查看引导错误

在排除 JBoss EAP 的故障时,第一个步骤应该是检查引导过程中出现的错误。您可以使用这些信息来诊断并找到原因。另外,您可以打一个支持问题单来寻求解决引导故障的帮助。

查看引导错误有两种方式,各自都有自己的优势。您可以直接查看 server.log文件或通过 read-boot-errors 管理 CLI 命令来查看引导错误。

查看服务器日志文件

您可以打开 server.log 文件来查看引导期间发生的任何错误。

这个方法允许您查看每个错误信息以及相关的信息,从而可以帮助您了解这些错误为什么会发生。您可以查看所有普通文本格式的错误信息。

  1. 在文件参看器里打开 server.log
  2. 进入文件的结尾处。
  3. 向后搜索 WFLYSRV0049,这标记着最新的引导序列的起始处。
  4. 搜索日志里出现的 ERROR。每条信息都包括错误的描述以及相关的模块。

下面是 server.log 日志文件里的错误描述示例。

2016-03-16 14:32:01,627 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.undertow.listener.default: org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
        at org.wildfly.extension.undertow.ListenerService.start(ListenerService.java:142)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
        ...
通过管理 CLI 命令读取引导错误

如果服务器在引导过程中报告错误,您可以使用 read-boot-errors 命令查看引导错误。

这个方法不要求访问服务器的文件系统,这对于没有访问权限却负责监控错误的用户来说是很有用的。因为这是一个管理 CLI 命令,它可以用在脚本里。例如,您可以编写一个脚本来启动多个 JBoss EAP 实例,然后检查引导过程中的错误。

运行下列管理 CLI 命令。

/core-service=management:read-boot-errors

在引导过程中出现的任何错误都会被列出。

{
    "outcome" => "success",
    "result" => [
        {
            "failed-operation" => {
                "operation" => "add",
                "address" => [
                    ("subsystem" => "undertow"),
                    ("server" => "default-server"),
                    ("http-listener" => "default")
                ]
            },
            "failure-description" => "{\"WFLYCTL0080: Failed services\" => {\"jboss.undertow.listener.default\" => \"org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    Caused by: java.net.BindException: Address already in use\"}}",
            "failed-services" => {"jboss.undertow.listener.default" => "org.jboss.msc.service.StartException in service jboss.undertow.listener.default: Could not start http listener
    Caused by: java.net.BindException: Address already in use"}
        }
        ...
    ]
}

12.1.3. 垃圾收集日志

垃圾收集日志把所有垃圾收集活动记录到普通文本日志文件里。这些日志文件可用于诊断目的。除了 IBM JDK 以外,垃圾收集日志会在所有支持的环境中的 JBoss EAP 独立服务器上默认启用。

垃圾收集日志的默认位置是 EAP_HOME/standalone/log/gc.log.DIGIT.current。在默认情况下,垃圾收集日志的每个文件的大小被限制为 3MB,最多 5 个文件进行轮换。

12.1.4. 默认的日志文件位置

下面的日志文件是为默认的日志配置创建的。默认的配置使用 periodic 日志处理程序写入服务器日志文件。

表 12.1. 独立服务器的默认日志文件

日志文件描述

EAP_HOME/standalone/log/server.log

包含服务器日志信息,其中包含服务器启动信息。

EAP_HOME/standalone/log/gc.log.DIGIT.current

包括垃圾收集的详细信息。

表 12.2. 受管域的默认日志文件

日志文件描述

EAP_HOME/domain/log/host-controller.log

包含和主机控制器启动相关的日志信息。

EAP_HOME/domain/log/process-controller.log

包含和进程控制器启动相关的日志信息。

EAP_HOME/domain/servers/SERVER_NAME/log/server.log

包含命名服务器的日志信息,其中包含服务器启动信息。

12.1.5. Set the Default Locale of the Server

You can configure the default locale for JBoss EAP by setting JVM properties in the appropriate startup configuration file. The startup configuration file is EAP_HOME/bin/standalone.conf for a standalone server or EAP_HOME/bin/domain.conf for a managed domain.

注意

For Windows Server, the JBoss EAP startup configuration files are standalone.conf.bat and domain.conf.bat.

Log messages that have been internationalized and localized will use this default locale. See the JBoss EAP Development Guide for information on creating internationalized log messages.

Set the Language

Specify the language by setting the user.language property using the JAVA_OPTS variable. For example, add the following line to the startup configuration file to set a French locale.

JAVA_OPTS="$JAVA_OPTS -Duser.language=fr"

Log messages that have been internationalized and localized will now output in French.

Set the Language and Country

In addition to the language, it may also be necessary to specify the country by setting the user.country property. For example, add the following line to the startup configuration file to set the Portuguese locale for Brazil.

JAVA_OPTS="$JAVA_OPTS -Duser.language=pt -Duser.country=BR"

Log messages that have been internationalized and localized will now output in Brazilian Portuguese.

12.2. 查看日志文件

查看服务器和应用程序日志对于诊断错误、性能及其他问题是很重要的。某些用户可能宁愿直接在服务器文件系统里查看日志。对于没有直接访问文件系统权限的用户、或者希望使用图形界面的用户来说,JBoss EAP 允许您在管理控制台里查看日志。您也可以通过管理 CLI 查看日志。

要使日志可以从其中一个管理界面进行访问,它必须位于服务器的 jboss.server.log.dir 属性指定的目录且定义为 file、periodic rotating、size rotating 或 periodic size rotating 日志处理程序。RBAC 角色分配也会被考虑,所以登录至管理控制台或 CLI 的用户只能查看被授权访问的日志。

在管理控制台里查看日志

您可以直接在管理控制台里查看日志。

  • 选择 Runtime 标签页。
  • 选择 Standalone Server。如果您运行在受管域里,请选择适当的服务器。
  • 选择 Log Files 并点击 View

在从列表里选择了日志文件后,就可以直接在管理控制台里查看和搜索日志内容。您也可以将日志文件下载到本地文件系统里。

警告

如果需要查看非常大的日志文件(如大于 100MB 的文件),则不适合使用管理控制台日志查看器。如果打开大于 15MB 的文件,您会被提示进行确认。在管理控制台里打开大型文件可能导致浏览器崩溃,所以您应该下载大型日志文件到本地,然后在文件编辑器里打开它。

通过管理 CLI 查看日志

您可以通过管理 CLI 的 read-log-file 命令阅读日志文件的内容。在默认情况下,它会显示指定的日志文件的最近的 10 行内容。

/subsystem=logging/log-file=LOG_FILE_NAME:read-log-file
注意

在受管域里,请在这个命令之前使用 /host=HOST_NAME/server=SERVER_NAME

您可以使用下列参数来定制日志输出。

encoding
用于读取文件的字符编码。
lines
从文件里读取的行数。-1 将读取日志的全部内容。默认值为 10
skip
读取文件前忽略的行数。默认值为 0
tail
是否从文件的结尾开始读取。默认为 true

例如,下列管理 CLI 命令从server.log 日志文件的顶部读取开始的 5 行内容。

/subsystem=logging/log-file=server.log:read-log-file(lines=5,tail=false)

这会产生下列输出。

{
    "outcome" => "success",
    "result" => [
        "2016-03-24 08:49:26,612 INFO  [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final-redhat-1",
        "2016-03-24 08:49:26,788 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final-redhat-1",
        "2016-03-24 08:49:26,863 INFO  [org.jboss.as] (MSC service thread 1-7) WFLYSRV0049: JBoss EAP 7.0.0.GA (WildFly Core 2.0.13.Final-redhat-1) starting",
        "2016-03-24 08:49:27,973 INFO  [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0039: Creating http management service using socket-binding (management-http)",
        "2016-03-24 08:49:27,994 INFO  [org.xnio] (MSC service thread 1-1) XNIO version 3.3.4.Final-redhat-1"
    ]
}

12.3. 关于日志子系统

JBoss EAP logging 子系统使用日志类别日志处理程序。日志类别定义要抓取哪些消息,而日志处理程序则定义如何处理这些消息,如写入到磁盘还是发送到控制台。

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

12.3.1. Root Logger

JBoss EAP 的 Root logger 抓取所有发送到服务器上的、没有被任何日志类别抓取的日志消息(等于或高于特定级别)。

在默认情况下,Root logger 会被配置成使用控制台或定期日志处理程序。定期日志处理程序写入到 server.log 文件,这个文件通常被称为服务器日志。

关于更多的信息,请参考配置 Root Logger

12.3.2. 日志类别

日志类别定义要捕获的一系列日志信息以及处理这些信息的一个或多个日志处理程序。

要捕获的日志信息是通过原始 Java 软件包和日志级别来指定的。来自该软件包里的类和日志级别的信息将被日志类别捕获并发送至指定的日志处理程序。

注意

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

日志类别也可以选择使用 Root Logger 而不是自己的日志处理程序。

详情请参考配置日志类别

12.3.3. 日志处理程序

日志处理程序定义如何记录捕获的日志信息。可用的日志处理程序类型有 consolefileperiodicsizeperiodic sizesyslogcustomasync

注意

日志处理程序必须添加到至少一个 logger 才能生效。

日志处理程序类型
Console
Console 日志处理程序将日志信息写入到主机操作系统的标准输出(stdout)或标准错误(stderr)。当从命令行提示运行 JBoss EAP 时会显示这些信息。来自 Console 日志处理程序的信息通常不会被保存,除非配置了操作系统捕获标准输出或标准错误流。
File
File 日志处理程序将日志信息写入到指定的文件。
Periodic
一个定期的日志处理程序将日志信息写入到某个命名文件,直至超过指定的时间。超时后文件将按照指定的时间戳重命名,而日志处理程序则继续写入到新创建的具有原来名称的日志文件。
Size
Size 日志处理程序将日志信息写入到某个命名文件,直至文件达到指定的大小。此时,文件将用一个数字后缀重命名,而日志处理程序则继续写入到新创建的具有原来名称的日志文件。每个 Size 日志处理程序都必须指定保持这种形式的最大文件数量。
Periodic Size

Periodic Size 日志处理程序将日志信息写入到某个命名文件,直至文件达到指定的大小 超过指定的时间。此时,文件将重命名,而日志处理程序则继续写入到新创建的具有原来名称的日志文件。

这是一个 Periodic 和 Size 日志处理程序的组合且支持联合的属性。

Syslog
Syslog 日志处理程序可以用来发送信息给远程的日志服务器。这允许多个应用程序发送日志信息到相同的服务器,在一起进行解析。
Custom
一个自定义日志处理程序让您可以配置新的日志处理程序类型。自定义处理程序必须实现为继承 java.util.logging.Handler 的 Java 类且包含在模块里。您也可以将 Log4J appender 用作自定义日志处理程序。
Async
Async 日志处理程序是一个日志处理程序 Wrapper,它为一个或多个日志处理程序提供异步行为。它可用于具有高延迟或其他性能问题(如写入日志信息到网络文件系统)的日志处理程序。

关于配置这些日志处理程序的细节,请参考配置日志处理程序章节。

12.3.4. 日志级别

日志级别是一个枚举值,它表示日志信息的性质和严重性。作为开发人员,您可以使用所选日志框架的相关方法指定日志级别来发送信息。

JBoss EAP 支持受支持的应用程序日志框架使用的所有日志级别。最常用的日志级别,从低到高分别是:TRACEDEBUGINFOWARNERRORFATAL

日志类别和处理程序使用日志级别来限制它们负责的日志信息。每个日志级别都有一个分配的数字值,指示其相对其他日志级别的顺序。日志类别和处理程序都分配一个日志级别,它们只处理该级别及高于该级别的日志信息。例如,具有 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 级别的日志指示可能阻止当前活动完成但不会阻止应用程序运行的错误已发生。

SEVERE

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

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

%F

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

%l

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

%L

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

%M

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

%x

嵌套的诊断性上下文。

%X

消息诊断性上下文。

%%

百分比(%)字符(脱字符)。

12.3.6. 过滤器表达式

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

注意

其他 logger 不会继承为 Root 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 配置过滤器表达式时,请确保转义过滤文本里的逗号和引号以正确处理字符串。您必须在逗号和引号之前使用反斜杠(\)并用引号包括整个表达式。下面是一个正确转义 substituteAll("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 开发指南》里的『隐性的模块依赖关系』章节。 #1635;

12.4. 配置日志类别

本节展示了如何用管理 CLI 配置日志类别。您也可以用管理控制台配置日志类别,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Log Categories 标签页。

配置日志类别将执行的主要任务是:

重要

如果您为日志配置集配置日志类别,命令必须以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是 /subsystem=logging/ 起始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加日志类别

日志类别名称是用原始 Java 软件包定义的。只要该软件包里的消息遵守其他设置(如日志级别),它们将被捕获。

/subsystem=logging/logger=LOG_CATEGORY:add

配置日志类别设置

根据具体要求,您可能需要设置一个或多个下列的日志类别属性。关于日志类别属性的完整列表及其描述,请参考日志类别属性

  • 设置日志级别。

    设置日志类别的日志级别。默认是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=level,value=LEVEL)
  • 设置这个类别是否应该使用 Root Logger 的日志处理程序。

    在默认情况下,处理自己的日志处理程序之外,日志类别将使用 Root logger。如果日志类别应该只使用分配的处理程序,请将 use-parent-handlers 属性为 false

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=use-parent-handlers,value=USE_PARENT_HANDLERS)
  • 设置过滤器表达式

    设置日志类别过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/logger=LOG_CATEGORY:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配处理程序

为日志类别分配日志处理程序。

/subsystem=logging/logger=LOG_CATEGORY:add-handler(name=LOG_HANDLER_NAME)

删除日志类别

您可以用 remove 操作删除日志类别。

/subsystem=logging/logger=LOG_CATEGORY:remove

12.5. 配置日志处理程序

日志处理程序定义如何记录捕获的日志信息。关于配置您需要的日志处理程序类型,请参考相关的章节。

12.5.1. 配置控制台日志处理程序

本节展示了如何用管理 CLI 配置 Console 日志处理程序。您也可以用管理控制台配置 Console 日志处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 Console

配置 Console 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加控制台日志处理程序
/subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:add
配置控制台日志处理程序设置

根据具体要求,您可能需要设置一个或多个 Console 日志处理程序属性。关于 Console 日志处理程序属性及其描述的完整列表,请参考 Console 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置目标。

    设置处理程序的目标,它可以是 System.outSystem.errconsole 中的一个。默认值是 System.out

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=target,value=TARGET)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的格式器字符串。例如,默认的格式字符串是 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n。请确保用引号包括 FORMAT 值。

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意

    如果您想引用 saved formatter,您可以使用 named-formatter 属性。

  • 设置自动冲刷。

    设置在每次写入后是否自动冲刷。默认值是 true

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 Console 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Console 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=CONSOLE_HANDLER_NAME)

下面的管理 CLI 命令将 Console 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=CONSOLE_HANDLER_NAME)
删除 Console 日志处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/console-handler=CONSOLE_HANDLER_NAME:remove

12.5.2. 配置 File 日志处理程序

本节展示了如何用管理 CLI 配置 File 日志处理程序。您也可以用管理控制台配置 File 日志处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 File

配置 File 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 File 日志处理程序

在添加 File 日志处理程序时,您必须用 file 属性指定文件路径,它由 pathrelative-to 属性组成。请使用 path 属性来设置日志的文件路径,其中包括名称,例如 my-log.log。您也可以选择 relative-to 属性来设置 path 为相对路径,例如 jboss.server.log.dir

/subsystem=logging/file-handler=FILE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
配置 File 日志处理程序设置

根据具体要求,您可能需要设置一个或多个 File 日志处理程序属性。关于 File 日志处理程序属性及其描述的完整列表,请参考 File 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置附加行为。

    在默认情况下,服务器重启时,JBoss EAP 将日志信息附加到相同的文件里。您可以设置 append 属性为 false,在服务器重启时覆盖这个文件。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的格式器字符串。例如,默认的格式字符串是 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n。请确保用引号包括 FORMAT 值。

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意

    如果您想引用 saved formatter,您可以使用 named-formatter 属性。

  • 设置自动冲刷。

    设置在每次写入后是否自动冲刷。默认值是 true

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/file-handler=FILE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 File 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 File 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=FILE_HANDLER_NAME)

下面的管理 CLI 命令将 File 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=FILE_HANDLER_NAME)
删除 File 日志处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/file-handler=FILE_HANDLER_NAME:remove

12.5.3. 配置 Periodic Rotating 日志处理程序

本节展示了如何用管理 CLI 配置 Periodic 日志处理程序。您也可以用管理控制台配置 Periodic 日志处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 Periodic

配置 Periodic 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 Periodic 日志处理程序

在添加 Periodic 日志处理程序时,您必须用 file 属性指定文件路径,它由 pathrelative-to 属性组成。请使用 path 属性来设置日志的文件路径,其中包括名称,例如 my-log.log。您也可以选择 relative-to 属性来设置 path 为相对路径,例如 jboss.server.log.dir

您也必须用 suffix 属性为轮换日志文件设置后缀。它必须是 java.text.SimpleDateFormat 可以理解的格式,例如 .yyyy-MM-dd-HH。轮换的周期会根据这个后缀自动计算。

/subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
配置 Periodic 日志处理程序设置

根据具体要求,您可能需要设置一个或多个 Periodic 日志处理程序属性。关于 Periodic 日志处理程序属性及其描述的完整列表,请参考 Periodic 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置附加行为。

    在默认情况下,服务器重启时,JBoss EAP 将日志信息附加到相同的文件里。您可以设置 append 属性为 false,在服务器重启时覆盖这个文件。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的格式器字符串。例如,默认的格式字符串是 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n。请确保用引号包括 FORMAT 值。

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意

    如果您想引用 saved formatter,您可以使用 named-formatter 属性。

  • 设置自动冲刷。

    设置在每次写入后是否自动冲刷。默认值是 true

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 Periodic 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Periodic 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_HANDLER_NAME)

下面的管理 CLI 命令将 Periodic 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=PERIODIC_HANDLER_NAME)
删除 Periodic 日志处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/periodic-rotating-file-handler=PERIODIC_HANDLER_NAME:remove

12.5.4. 配置 Size Rotating 日志处理程序

本节展示了如何用管理 CLI 配置 Size 日志处理程序。您也可以用管理控制台配置 Size 日志处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 Size

配置 Size 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 Size 日志处理程序

在添加 Size 日志处理程序时,您必须用 file 属性指定文件路径,它由 pathrelative-to 属性组成。请使用 path 属性来设置日志的文件路径,其中包括名称,例如 my-log.log。您也可以选择 relative-to 属性来设置 path 为相对路径,例如 jboss.server.log.dir

/subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH})
配置 Size 日志处理程序设置

根据具体要求,您可能需要设置一个或多个 Size 日志处理程序属性。关于 Size 日志处理程序属性及其描述的完整列表,请参考 Size 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置轮换日志文件的后缀。

    设置后缀字符串,它必须是 java.text.SimpleDateFormat 可理解的格式,例如 .yyyy-MM-dd-HH。轮换的周期将根据这个后缀自动计算。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=suffix, value=SUFFIX)
  • 设置轮换大小。

    设置文件的最大值。当文件大小达到这个值时就需要进行轮换。默认值是 2m,亦即 2MB。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
  • 设置保留的备份日志的最大数目。

    设置保留的备份数量。默认值是 1

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
  • 设置是否在引导时轮换日志文件。

    在默认情况下,服务器重启时不会创建新的日志文件。您可以将它设置为 true 在服务器重启时轮换日志文件。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
  • 设置附加行为。

    在默认情况下,服务器重启时,JBoss EAP 将日志信息附加到相同的文件里。您可以设置 append 属性为 false,在服务器重启时覆盖这个文件。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的格式器字符串。例如,默认的格式字符串是 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n。请确保用引号包括 FORMAT 值。

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意

    如果您想引用 saved formatter,您可以使用 named-formatter 属性。

  • 设置自动冲刷。

    设置在每次写入后是否自动冲刷。默认值是 true

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 Size 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Size 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=SIZE_HANDLER_NAME)

下面的管理 CLI 命令将 Size 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=SIZE_HANDLER_NAME)
删除 Size 日志处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/size-rotating-file-handler=SIZE_HANDLER_NAME:remove

12.5.5. 配置 Periodic Size Rotating 日志处理程序

本节展示了如何用管理 CLI 配置 Periodic Size 日志处理程序。您也可以用管理控制台配置 Periodic Size 日志处理程序,您可以进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 Periodic Size

配置 Periodic Size 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 Periodic Size 日志处理程序

在添加 Periodic Size 日志处理程序时,您必须用 file 属性指定文件路径,它由 pathrelative-to 属性组成。请使用 path 属性来设置日志的文件路径,其中包括名称,例如 my-log.log。您也可以选择 relative-to 属性来设置 path 为相对路径,例如 jboss.server.log.dir

您也必须用 suffix 属性为轮换日志文件设置后缀。它必须是 java.text.SimpleDateFormat 可以理解的格式,例如 .yyyy-MM-dd-HH。轮换的周期会根据这个后缀自动计算。

/subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:add(file={path=FILE_PATH,relative-to=RELATIVE_TO_PATH},suffix=SUFFIX)
配置 Periodic Size 日志处理程序设置

根据具体要求,您可能需要设置一个或多个 Periodic Size 日志处理程序属性。关于 Periodic Size 日志处理程序属性及其描述的完整列表,请参考 Periodic Size 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置轮换大小。

    设置文件的最大值。当文件大小达到这个值时就需要进行轮换。默认值是 2m,亦即 2MB。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-size, value=ROTATE_SIZE)
  • 设置保留的备份日志的最大数目。

    设置保留的备份数量。默认值是 1

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=max-backup-index, value=MAX_BACKUPS)
  • 设置是否在引导时轮换日志文件。

    在默认情况下,服务器重启时不会创建新的日志文件。您可以将它设置为 true 在服务器重启时轮换日志文件。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=rotate-on-boot, value=ROTATE_ON_BOOT)
  • 设置附加行为。

    在默认情况下,服务器重启时,JBoss EAP 将日志信息附加到相同的文件里。您可以设置 append 属性为 false,在服务器重启时覆盖这个文件。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=append,value=APPEND)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的格式器字符串。例如,默认的格式字符串是 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n。请确保用引号包括 FORMAT 值。

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意

    如果您想引用 saved formatter,您可以使用 named-formatter 属性。

  • 设置自动冲刷。

    设置在每次写入后是否自动冲刷。默认值是 true

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=autoflush,value=AUTO_FLUSH)
  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 Periodic Size 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Periodic Size 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)

下面的管理 CLI 命令将 Periodic Size 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=PERIODIC_SIZE_HANDLER_NAME)
删除 Periodic Size 日志处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/periodic-size-rotating-file-handler=PERIODIC_SIZE_HANDLER_NAME:remove

12.5.6. 配置 Syslog 处理程序

本节展示了如何用管理 CLI 配置 Syslog 处理程序,它可以用来发送消息至支持 Syslog 协议(RFC-3164 或 RFC-5424).)的远程日志服务器。您也可以用管理控制台配置 Syslog 处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 Syslog

配置 Syslog 处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 Syslog 处理程序
/subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:add
配置 Syslog 处理程序设置

根据具体要求,您可能需要设置一个或多个 Syslog 日志处理程序属性。关于 Syslog 日志处理程序属性及其描述的完整列表,请参考 Syslog 处理程序属性

  • 设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置要登记日志的应用程序的名称。其默认值是 java

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=app-name,value=APP_NAME)
  • 设置 syslog 服务器的地址。默认地址是 localhost

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=server-address,value=SERVER_ADDRESS)
  • 设置 syslog 服务器的端口。默认端口是 514

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=port,value=PORT)
  • 设置 syslog 格式(由 RFC 规格定义)。默认格式是 RFC5424

    /subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:write-attribute(name=syslog-format,value=SYSLOG_FORMAT)
分配 Syslog 处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Syslog 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=SYSLOG_HANDLER_NAME)

下面的管理 CLI 命令将 Syslog 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=SYSLOG_HANDLER_NAME)
删除 Syslog 处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/syslog-handler=SYSLOG_HANDLER_NAME:remove

12.5.7. 配置自定义日志处理程序

本节展示了如何用管理 CLI 配置 custom 日志处理程序。您也可以用管理控制台配置 custom 日志处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 File

配置 Custom 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 Custom 日志处理程序

在添加 Custom 日志处理程序时,您必须指定处理程序的 Java 类及它所在的 JBoss EAP 模块。这个类必须继承 java.util.logging.Handler

注意

您必须已经创建了包含自定义 logger 的模块,否则这个命令将无法运行。

/subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:add(class=CLASS_NAME,module=MODULE_NAME)
配置 Custom 日志处理程序设置

根据具体要求,您可能需要设置一个或多个 Custom 日志处理程序属性。关于 Custom 日志处理程序属性及其描述的完整列表,请参考 Custom 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置属性。

    设置日志处理程序所必需的属性。这些属性必须可以通过 setter 方法访问。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
  • 设置编码。

    设置处理程序的编码,例如 utf-8

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=encoding,value=ENCODING)
  • 设置日志格式器。

    设置处理程序的格式器字符串。例如,默认的格式字符串是 %d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n。请确保用引号包括 FORMAT 值。

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=formatter,value=FORMAT)
    注意

    如果您想引用 saved formatter,您可以使用 named-formatter 属性。

  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 Custom 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Custom 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=CUSTOM_HANDLER_NAME)

下面的管理 CLI 命令将 Custom 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=CUSTOM_HANDLER_NAME)
删除 Custom 日志处理程序

日志处理程序可以用 remove 操作删除。如果日志处理程序目前分配给了 logger 或异步日志处理程序,它就无法被删除。

/subsystem=logging/custom-handler=CUSTOM_HANDLER_NAME:remove

12.5.8. 配置 Async 日志处理程序

本节展示了如何用管理 CLI 配置 Async 日志处理程序。您也可以用管理控制台配置 Async 日志处理程序,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Handler 标签页,并从左侧的菜单选择 Async

配置 Async 日志处理程序时要执行的主要任务是:

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

添加 Async 日志处理程序

当添加 Async 日志处理程序时,您必须指定队列长度。这是可以保持在队列里的日志请求的最大数目。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add(queue-length=QUEUE_LENGTH)
添加子处理程序

您可以添加一个或多个处理程序作为这个 Async 日志处理程序的子处理程序。请注意,这些处理程序必须已存在于配置里,否则这个命令会无法运行。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:add-handler(name=HANDLER_NAME)
配置 Async 日志处理程序设置

根据具体要求,您可能需要设置一个或多个 Async 日志处理程序属性。关于 Async 日志处理程序属性及其描述的完整列表,请参考 Async 日志处理程序属性

  • 设置日志级别。

    设置处理程序的日志级别。默认值是 ALL。关于所有可用的选项,请参考日志级别

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=level,value=LEVEL)
  • 设置溢出操作。

    设置溢出时进行的操作。默认值是 BLOCK,表示线程在队列已满时会阻塞。您可以将这个值改为 DISCARD,也就是在队列已满时丢弃日志信息。

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=overflow-action,value=OVERFLOW_ACTION)
  • 设置过滤器表达式

    设置处理程序过滤日志信息的表达式。请确保转义任何逗号和引号并用引号括起表达式。例如,对于下面的可替换变量 FILTER_EXPRESSION,需要用 "not(match(\"WFLY\"))" 替换过滤表达式 not(match("WFLY"))

    /subsystem=logging/async-handler=ASYNC_HANDLER_NAME:write-attribute(name=filter-spec, value=FILTER_EXPRESSION)

    关于可用的过滤器表达式的更多信息,请参考过滤器表达式章节。

分配 Async 日志处理程序给 Logger

要激活日志处理程序,您必须将其分配给一个 Logger。

下面的管理 CLI 命令将 Async 日志处理程序分配给 Root Logger。

/subsystem=logging/root-logger=ROOT:add-handler(name=ASYNC_HANDLER_NAME)

下面的管理 CLI 命令将 Async 日志处理程序分配给名称由 CATEGORY 指定的 Logger。

/subsystem=logging/logger=CATEGORY:add-handler(name=ASYNC_HANDLER_NAME)
删除 Async 日志处理程序

日志处理程序可以用 remove 操作删除。但如果日志处理程序目前分配给了 logger,它就无法被删除。

/subsystem=logging/async-handler=ASYNC_HANDLER_NAME:remove

12.6. 配置 Root Logger

root logger 抓取所有发送到服务器上的、没有被任何日志类别抓取的日志消息(等于或高于特定级别)。

本节展示了如何用管理 CLI 配置 Root Logger。您也可以用管理控制台配置 Root Logger,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Root Logger 标签页。

配置 Root Logger

重要

如果您为日志配置集配置这个日志处理程序,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

  1. 将日志处理程序添加至 Root Logger。

    添加日志处理程序。

    /subsystem=logging/root-logger=ROOT:add-handler(name=LOG_HANDLER_NAME)

    删除日志处理程序。

    /subsystem=logging/root-logger=ROOT:remove-handler(name=LOG_HANDLER_NAME)
  2. 设置日志级别。

    /subsystem=logging/root-logger=ROOT:write-attribute(name=level,value=LEVEL)

关于可用的 Root Logger 属性及其描述的完整列表,请参考 Root Logger 属性

12.7. 配置日志格式器

日志格式器定义处理程序的日志信息的外观。您可以配置命名模式格式器自定义日志格式器

12.7.1. 配置命名模式格式器(Named Pattern Formatter)

您可以创建日志处理程序用来格式化日志信息的命名模式格式器。

本节展示了如何用管理 CLI 配置日志格式器。您也可以用管理控制台配置日志格式器,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Formatter 标签页,并从左侧的菜单选择 Pattern

重要

如果您为日志配置集配置这个日志格式器,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

创建命名格式器

在定义格式器时,您要提供模式字符串来格式化日志消息。关于模式语法的详情,请参考日志格式器

/subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:add(pattern=PATTERN_STRING)

您也可以定义一个颜色表来为不同的日志级别分配不同颜色。其格式是用逗号隔开的 LEVEL:COLOR 列表。

  • 有效级别:finest, finer, fine, config, trace, debug, info, warning, warn, error, fatal, severe
  • 有效颜色:black, green, red, yellow, blue, magenta, cyan, white, brightblack, brightred, brightgreen, brightblue, brightyellow, brightmagenta, brightcyan, brightwhite
/subsystem=logging/pattern-formatter=PATTERN_FORMATTER_NAME:write-attribute(name=color-map,value="LEVEL:COLOR,LEVEL:COLOR")
为日志处理程序分配命名格式器

下面的管理 CLI 命令分配了一个由定期轮换文件处理程序使用的模式格式器。

/subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter,value=PATTERN_FORMATTER_NAME)

12.7.2. 配置自定义日志格式器

您也可以创建日志处理程序和格式化消息都可以使用的自定义日志格式器。

本节展示了如何用管理 CLI 配置自定义日志格式器。您也可以用管理控制台配置日志格式器,您可以先从 Configuration 标签页进入 Logging 子系统,然后选择 Formatter 标签页,并从左侧的菜单选择 Custom

配置自定义日志格式器
重要

如果您为日志配置集配置这个日志格式器,命令将以 /subsystem=logging/logging-profile=LOGGING_PROFILE_NAME/ 而不是/subsystem=logging/ 开始。

此外,如果您运行在受管域里,请在命令里先使用 /profile=PROFILE_NAME

  1. 添加自定义日志格式器。

    在添加 Custom 日志格式器时,您必须指定格式器的 Java 类及它所在的 JBoss EAP 模块。这个类必须继承 java.util.logging.Formatter

    注意

    您必须也创建一个包含自定义格式器的模块,否则这个命令会执行失败。

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:add(class=CLASS_NAME, module=MODULE_NAME)
  2. 为日志格式器设置必要的属性。

    这些属性必须用 setter 方法来访问。

    /subsystem=logging/custom-formatter=CUSTOM_FORMATTER_NAME:write-attribute(name=properties.PROPERTY_NAME,value=PROPERTY_VALUE)
  3. 为日志处理程序分配自定义格式器

    下面的管理 CLI 命令分配了一个由定期轮换文件处理程序使用的自定义格式器。

    /subsystem=logging/periodic-rotating-file-handler=FILE_HANDLER_NAME:write-attribute(name=named-formatter, value=CUSTOM_FORMATTER_NAME)
自定义 XML 格式器示例

下面的例子配置了一个自定义 XML 格式器。它使用 org.jboss.logmanager 模块里提供的 java.util.logging.XMLFormatter 类并将其分配至控制台日志处理程序。

/subsystem=logging/custom-formatter=custom-xml-formatter:add(class=java.util.logging.XMLFormatter, module=org.jboss.logmanager)
/subsystem=logging/console-handler=CONSOLE:write-attribute(name=named-formatter, value=custom-xml-formatter)

使用这个格式器的日志消息将有如下格式。

<record>
  <date>2016-03-23T12:58:13</date>
  <millis>1458752293091</millis>
  <sequence>93963</sequence>
  <logger>org.jboss.as</logger>
  <level>INFO</level>
  <class>org.jboss.as.server.BootstrapListener</class>
  <method>logAdminConsole</method>
  <thread>22</thread>
  <message>WFLYSRV0051: Admin console listening on http://%s:%d</message>
  <param>127.0.0.1</param>
  <param>9990</param>
</record>

12.8. 关于应用程序日志

应用程序的日志可以用 JBoss EAP 的 logging 子系统配置或对每个部署进行配置。

关于使用 JBoss EAP 日志类别和处理程序来采集日志信息,请参考关于日志子系统

关于应用程序日志的更多信息,如支持的应用程序日志框架和配置 per-deployment 日志,请参考 《JBoss EAP 部署指南》里的 Logging for Developers 章节。

12.8.1. Per-deployment 日志

Per-deployment 日志允许开发人员提前为应用程序配置日志。当部署应用程序时,日志按照预先定义的配置进行记录。通过这个配置创建的日志文件只包含和应用程序行为相关的信息。

注意

如果没有进行部署前的日志设置,则应用程序和服务器会使用 logging 子系统的设置。

和使用系统范围的日志功能相比,这个方法有利有弊。它的优点是,JBoss EAP 实例的管理员不需要配置除服务器日志以外的任何日志功能。而缺点是,部署前的日志配置只在启动时可读,因此无法在运行时进行修改。

关于在您的应用程序里使用 per-deployment 日志的说明,请参考《JBoss EAP 部署指南》里的『添加 Per-deployment 日志到应用程序』章节。

12.8.1.1. 禁用 Per-deployment 日志

您可以用下列方法之一禁用 Per-deployment 日志

  • 设置 use-deployment-logging-config 属性为 false

    use-deployment-logging-config 属性控制是否您的部署启用 per-deployment 日志。它的默认值为 true。您可以设置这个属性为 false 来禁用 per-deployment 日志。

    /subsystem=logging:write-attribute(name=use-deployment-logging-config,value=false)
  • jboss-deployment-structure.xml 文件排除 logging 子系统。

    相关的说明,请参考《JBoss EAP 部署指南》里的从部署里排除子系统章节。

12.8.2. 日志配置集

日志配置集是独立的日志配置组,它可以分配给部署的应用程序。作为一般的 logging 子系统,日志配置集可以定义 handler、类型以及一个根日志程序,但它无法参考其它配置集或主 logging 子系统的配置。日志配置集的结构和 logging 子系统一样,这样可以减轻配置负担。

日志配置集允许管理员,在不影响其它日志配置的情况下,针对一个或多个应用程序创建日志配置。因为每个配置集都是在服务器配置中定义的,所以可以在不重新部署受影响的应用程序的情况下,修改日志配置。

每个日志配置集可以有:

  • 一个唯一的名称(必需)
  • 任意数量的日志处理程序
  • 任意数量的日志类别
  • 最多一个 Root Logger

应用程序可以在它的 MANIFEST.MF 文件里用 Logging-Profile 属性指定一个日志配置集。

12.8.2.1. 配置日志配置集

日志配置集可用日志处理程序、类别和 Root Logger 来配置。它使用与主 logging 子系统几乎完全相同的语法,除了两点不同:

  • 根配置路径是 /subsystem=logging/logging-profile=NAME
  • 日志配置集不能包含其他日志配置集。
创建和配置日志配置集

下面的过程使用管理 CLI 来创建日志配置集并设置了一个文件处理程序和 Logger 类别。

  1. 创建日志配置集。

    /subsystem=logging/logging-profile=PROFILE_NAME:add
  2. 创建文件处理程序。

    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:add(file={path=>"LOG_NAME.log", "relative-to"=>"jboss.server.log.dir"})
    /subsystem=logging/logging-profile=PROFILE_NAME/file-handler=FILE_HANDLER_NAME:write-attribute(name="level", value="DEBUG")
  3. 创建 Loger 类别。

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add(level=TRACE)
  4. 分配文件处理程序给类别。

    /subsystem=logging/logging-profile=PROFILE_NAME/logger=CATEGORY_NAME:add-handler(name="FILE_HANDLER_NAME")

您可以在应用程序的 MANIFEST.MF 文件中设置日志配置集。如需了解更详细的信息,请参阅开发指南中的 Specify a Logging Profile in an Application

12.8.2.2. 日志配置集示例

这个例子展示了日志配置集和使用它的应用程序的配置。它也展示了管理 CLI 命令、结果 XML 和应用程序的 MANIFEST.MF 文件。

这个日志配置集示例具有下列特点:

  • 它的名称是 accounts-app-profile
  • 日志类别是 com.company.accounts.ejbs
  • 日志级别是 TRACE
  • 日志处理程序是使用 ejb-trace.log 的文件处理程序。

管理 CLI 会话

/subsystem=logging/logging-profile=accounts-app-profile:add

/subsystem=logging/logging-profile=accounts-app-profile/file-handler=ejb-trace-file:add(file={path=>"ejb-trace.log", "relative-to"=>"jboss.server.log.dir"})

/subsystem=logging/logging-profile=accounts-app-profile/file-handler=ejb-trace-file:write-attribute(name="level", value="DEBUG")

/subsystem=logging/logging-profile=accounts-app-profile/logger=com.company.accounts.ejbs:add(level=TRACE)

/subsystem=logging/logging-profile=accounts-app-profile/logger=com.company.accounts.ejbs:add-handler(name="ejb-trace-file")

XML 配置

<logging-profiles>
   <logging-profile name="accounts-app-profile">
      <file-handler name="ejb-trace-file">
         <level name="DEBUG"/>
         <file relative-to="jboss.server.log.dir" path="ejb-trace.log"/>
      </file-handler>
      <logger category="com.company.accounts.ejbs">
         <level name="TRACE"/>
         <handlers>
            <handler name="ejb-trace-file"/>
         </handlers>
      </logger>
   </logging-profile>
</logging-profiles>

应用程序的 MANIFEST.MF 文件

Manifest-Version: 1.0
Logging-Profile: accounts-app-profile

12.8.3. 查看部署日志配置

您可以用下列管理 CLI 命令获得特定部署的日志配置信息。

/deployment=DEPLOYMENT_NAME/subsystem=logging/configuration=CONFIG:read-resource

部署日志的 configuration 值可以是:

  • 如果部署使用 logging 子系统,则是 default。这将输出 logging 子系统配置。
  • 如果部署使用 logging 子系统里定义的日志配置集,则是 profile-PROFILE_NAME。这将输出日志配置集配置。
  • 被使用的配置文件的路径,例如:myear.ear/META-INF/logging.properties

例如,下面的管理 CLI 命令显示指定的部署使用的 MYPROFILE 日志配置集的配置。

/deployment=mydeployment.war/subsystem=logging/configuration=profile-MYPROFILE:read-resource(recursive=true,include-runtime=true)

这将输出下列信息。

{
    "outcome" => "success",
    "result" => {
        "error-manager" => undefined,
        "filter" => undefined,
        "formatter" => {
            "MYFORMATTER" => {
                "class-name" => "org.jboss.logmanager.formatters.PatternFormatter",
                "module" => undefined,
                "properties" => {"pattern" => "%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"}
            }
        },
        "handler" => {
            "MYPERIODIC" => {
                "class-name" => "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler",
                "encoding" => undefined,
                "error-manager" => undefined,
                "filter" => undefined,
                "formatter" => "MYFORMATTER",
                "handlers" => [],
                "level" => "ALL",
                "module" => undefined,
                "properties" => {
                    "append" => "true",
                    "autoFlush" => "true",
                    "enabled" => "true",
                    "suffix" => ".yyyy-MM-dd",
                    "fileName" => "EAP_HOME/standalone/log/deployment.log"
                }
            }
        },
        "logger" => {"MYCATEGORY" => {
            "filter" => undefined,
            "handlers" => [],
            "level" => "DEBUG",
            "use-parent-handlers" => true
        }},
        "pojo" => undefined
    }
}

您也可以使用递归的 read-resource 操作来读取部署的日志配置和其他信息。

/deployment=DEPLOYMENT_NAME/subsystem=logging:read-resource(include-runtime=true, recursive=true)