高性能可扩展日志记录 (HPEL)
高性能可扩展日志记录 (HPEL) 是作为 WebSphere® Application Server 的部件来提供的日志和跟踪设施。
概述

HPEL 提供了一种很方便的机制来存储和访问应用程序服务器或应用程序生成的日志、跟踪、System.err 和 System.out 信息。HPEL 替代了基本日志和跟踪设施,基本日志和跟踪设施提供了 JVM 日志、诊断跟踪和服务日志文件(通常名为 SystemOut.log/SystemErr.log、trace.log 和 activity.log)。
HPEL 提供了一种很方便的机制来存储和访问应用程序服务器或应用程序生成的日志、跟踪、System.err 和 System.out 信息。
HPEL 替代了 z/OS® 平台上提供的现有日志和跟踪设施,它利用 JES、日志流、组件跟踪、分层文件系统或者其他设施。
HPEL 日志和跟踪存储器
HPEL 提供了日志数据存储库、跟踪数据存储库和文本日志文件。请参阅下图以了解应用程序和应用程序服务器如何存储日志和跟踪信息。

- HPEL 日志数据存储库
日志数据存储库是用于存储日志记录的存储设施。通常由管理员复查日志数据。这包括关于应用程序或服务器写入到 Detail 级别或更高级别(包括 Detail、Config、Info、Audit、Warning、Severe、Fatal 以及 Detail 级别或更高级别的任何定制级别)的 System.out、System.err 或 java.util.logging 中的任何信息。
- HPEL 跟踪数据存储库
跟踪数据存储库是用于存储跟踪记录的存储设施。跟踪数据通常供应用程序员或者 WebSphere Application Server 支持团队使用。这包括关于应用程序或服务器写入到低于 Detail 级别的级别(包括 Fine、Finer、Finest 以及低于 Detail 级别的任何定制级别)的 java.util.logging 的任何信息。
支持的配置: 写入到不推荐使用的 JRAS 日志记录 API 的日志和跟踪内容也包括在日志和跟踪数据存储库中。还可以配置某些日志记录 API(例如,Jakarta Commons Logging),以将其日志和跟踪数据传递至 java.util.logging,并且还会将其输出存储在日志数据存储库或跟踪数据存储库中。sptcfg
- HPEL 文本日志
-
文本日志文件是用于保存日志和跟踪记录的纯文本文件。提供文本日志文件主要是为了方便,以便不必运行将日志数据存储库内容转换为纯文本的 LogViewer 命令行工具,也能读取日志内容。
文本日志文件中不包含任何也存储在日志数据存储库或者跟踪数据存储库中的内容。可以禁用文本日志以提高服务器性能。可以配置文本日志以记录跟踪内容,从而便于调试。
文本日志文件仅包含由控制器进程生成的日志条目,不包含来自服务方或助手进程的日志条目。因此,不会将应用程序日志记录写入 z/OS 上的文本日志。要查看所有应用程序服务器进程的日志或跟踪数据,请使用 LogViewer 命令行工具或管理控制台中的 HPEL 日志查看工具。
避免故障: 将跟踪写入文本日志会大幅度地降低性能。gotcha
日志和跟踪性能
HPEL 经设计和测试证实,明显优于现有的基本日志和跟踪设施。。优点之一:应用程序服务器可以在启用了跟踪的情况下运行,从而导致对性能的影响更小(与使用基本日志记录来跟踪相同的组件相比)。优点之二:要频繁写入日志的应用程序在使用 HPEL 的情况下可能运行更快。许多因素都会影响 HPEL 日志记录和跟踪的总体性能。
- 每个日志和跟踪事件都只存储在一个位置
日志事件 System.out 和 System.err 存储在日志数据存储库中。跟踪事件存储在跟踪数据存储库中。如果已禁用文本日志文件,那么 HPEL 可能只能将日志和跟踪内容写入这些存储库中。将每种类型的事件存储在一个位置可确保不会因重复进行数据存储而影响性能。
启用了文本日志文件时,会将日志事件(还可以选择跟踪事件)写入文本日志文件中。由于此数据始终也会存储在日志数据存储库和跟踪数据存储库中,因此,文本日志文件的内容会重复。提供文本日志是为了方便那些不想运行 LogViewer 命令行工具来查看日志和跟踪的用户;但是,如果不需要这种方便,那么您可以禁用文本日志。
- 进程之间不共享日志和跟踪存储库
使进程之间的活动同步会导致涉及到的所有进程的性能下降。使用 HPEL 时,每个服务器进程都有它自己的日志数据存储库、跟踪数据存储库和文本日志文件。由于进程之间不共享这些文件,因此,服务器运行时环境在写入到这些目标时,不需要与其他进程同步。
- 除非数据需要格式化,否则不会将数据格式化
将使用处理器时间来格式化数据以供用户读取。HPEL 日志和跟踪数据会以专用二进制表示更快速进行存储,而不用在运行时格式化日志事件和跟踪事件数据。这将提高日志和跟踪设施的性能。通过延迟到 LogViewer 运行时才格式化日志和跟踪,决不会格式化从未查看的日志或跟踪的各部分。
可以启用文本日志文件,这会以已经可读的文本格式来存储日志数据和跟踪数据。
最佳实践: 当服务器性能是一个关键考虑因素或者不需要文本日志时,请禁用文本日志。bprac
- 将日志和跟踪数据写入磁盘之前对其进行缓存
将大块数据写入磁盘比将相同数量的数据写入小块的效率更高。在将日志和跟踪数据写入磁盘之前,HPEL 会对其进行缓存。缺省情况下,在将日志和跟踪数据写入磁盘之前,这些数据存储在 8 KB 缓冲区中。如果缓冲区在 10 秒钟之内已填满,那么会将缓冲区写入磁盘。如果缓冲区在 10 秒钟之内未填满,那么会自动将其写入磁盘,以确保日志具有最新信息。
支持的配置: 可以通过设置 HPEL.BUFFER.SIZE 系统属性来控制缓冲区大小。可以通过设置 HPEL.FLUSH.PERIOD.SECS 系统属性来控制将缓冲区写入磁盘的频率。sptcfg
日志和跟踪的管理
已经将 HPEL 设计为容易配置和了解。例如,管理员很容易配置供日志和跟踪专用的磁盘空间量、日志和跟踪记录的保留时间以及由服务器来管理日志和跟踪内容。又比如,可以使用一个容易使用的命令 (binaryLog) 来访问所有日志、跟踪、System.out 和 System.err 内容,从而避免对于要在哪个文件中访问特定内容可能发生任何混淆。
- 从日志数据存储库和跟踪数据存储库中读取
日志数据存储库和跟踪数据存储库是按 WebSphere Application Server 专用格式存储的,无法使用诸如记事本或 VI 的文本文件编辑器来读取这些存储库。可以使用 LogViewer 命令将日志数据存储库和跟踪数据存储库复制到纯文本格式。
- HPEL LogViewer 命令
HPEL LogViewer 是为 HPEL 用户提供的一个容易使用的命令行工具,用来处理日志数据存储库和跟踪数据存储库。LogViewer 提供了过滤和格式化选项,从而很容易在日志数据存储库和跟踪数据存储库中查找重要内容。例如,用户可以过滤任何错误或警告,然后过滤在 10 秒钟之内发生的所有日志和跟踪条目,以找出同一线程上的关键错误消息。
- 使用日志和跟踪记录扩展内容进行过滤
可以使用 LogViewer 命令行工具根据日志和跟踪记录扩展的内容来过滤记录。应用程序服务器会自动为每条与 Java™ Platform, Enterprise Edition (Java EE) 应用程序相关的日志和跟踪记录创建 appName 扩展,以指示该应用程序的名称。对于在处理特定类型的请求(例如,HTTP 或 JMS 请求)期间创建的每条日志和跟踪记录,应用程序服务器也会自动创建 requestID 扩展,以指示该请求的唯一标识。
当启用了“跨组件跟踪”时,只会将 requestID 扩展添加至日志和跟踪记录。HPEL 还能够使开发者使用日志记录上下文 API (com.ibm.websphere.logging.hpel.LogRecordContext) 对日志和跟踪记录添加定制扩展。
- 管理控制台中的 HPEL
管理控制台中包含一些页面,使 HPEL 管理员能够执行下列操作:
- 配置 HPEL 日志数据存储库。
- 配置 HPEL 跟踪数据存储库。
- 配置 HPEL 文本日志文件。
- 查看 HPEL 日志和跟踪数据存储库的内容。
- 查看和设置用于日志记录和跟踪的日志详细信息级别。
要使用这些功能,在管理控制台中,单击
链接。
开发资源
HPEL 的设计使其在日志和跟踪内容使用方面,比之基本日志记录设施更灵活而高效。日志和跟踪内容可以直接过滤以仅显示感兴趣的记录。您可以使用命令行(请参阅 HPEL LogViewer 命令的描述),或者开发者可以使用 HPEL API 来创建功能强大的日志处理程序。
- 从日志数据存储库和跟踪数据存储库中读取脚本和 Java 程序
- 对于如何读取日志数据存储库和跟踪数据存储库,开发者和脚本编写人员有许多选项可供选择:
- 从 wsadmin 脚本使用 HPELControlService JMX MBean 在本地或者远程读取
- 从 Java 程序使用 HPELControlService JMX MBean 在本地或者远程读取
- 从 Java 程序使用 com.ibm.websphere.logging.hpel API 在本地读取
- 与 HPEL 相关的 JMX MBean
已提供 MBean 接口来简化对 HPEL 存储库内容的远程访问。例如,开发者可以编写一个 JMX 客户机程序,以从 WebSphere Application Server 单元中读取日志内容。此接口是 HPELControlService MBean 的一部分。请参阅 MBean 接口文档以了解有关 HPEL 远程日志读取接口的详细信息。
表 1. 与 HPEL 相关的 JMX MBean. JMX MBean 与 HPEL 的操作相关。 JMX MBean 描述 HPELControlService 提供与配置服务器的日志或跟踪详细信息级别、查看日志组件注册表以及查询日志和跟踪存储库相关的操作。 HPELLogDataService 提供与配置服务器的日志数据存储库相关的操作 HPELTraceDataService 提供与配置服务器的跟踪数据存储库相关的操作 HPELTextLogService 提供与配置服务器的文本日志文件相关的操作 RasLoggingService 仅用于日志事件的 JMX 通知 将 HPEL 用于日志和跟踪而不用于基本日志记录时,未使用日志和跟踪 JMX MBean TraceService。
- HPEL API
已提供 API 帮助开发者开发一些工具来使用 HPEL 日志和跟踪存储库中的内容。例如,开发者可以编写 Java 程序来搜索日志和跟踪内容,以查找其消息标识与已知的重要消息标识列表相匹配的任何消息。此 API 位于 com.ibm.websphere.logging.hpel 包中。请参阅 API 文档以了解有关 HPEL 日志读取 API 的详细信息。
- 日志和跟踪记录可扩展性
开发者可以使用 HPEL 并通过日志记录上下文 API (com.ibm.websphere.logging.hpel.LogRecordContext) 向日志和跟踪记录添加定制扩展。当 HPEL 存储日志和跟踪记录时,它会将存在于日志记录上下文中的任何扩展包括在同一线程上。例如,开发者可以编写 Servlet 过滤器,以向日志记录上下文添加重要的 HTTP 请求参数。当该 Servlet 运行时,HPEL 会向在同一线程上创建的任何日志和跟踪记录添加这些扩展。
与其他日志和跟踪记录字段一样,开发者可以使用 HPEL API 来访问记录扩展。这在编写工具以从日志和跟踪存储库中读取时很有用。在运行时,开发者还可以利用日志记录上下文 API 来访问定制日志处理程序、过滤器和格式化程序中的扩展。