java异步记录日志到jms,客户端运行时日志记录 (Sun Java System Message Queue 4.0 发行说明)...

郎成龙
2023-12-01

客户端运行时日志记录

本部分介绍了 Message Queue 4.0 对客户端运行时日志记录的支持,记录内容包括与连接和会话有关的事件。

JDK 1.4(及更高版本)包含 java.util.logging 库。此库实现了一个标准记录程序接口,可用于特定于应用程序的日志记录。

Message Queue 客户端运行时使用 Java 日志记录 API 来实现日志记录功能。可以使用所有 J2SE 1.4 日志记录工具来配置日志记录活动。 例如,应用程序可以使用以下 Java 日志记录工具来配置 Message Queue 客户端运行时输出日志记录信息的方式:

日志记录处理程序

日志记录过滤器

日志记录格式化程序

日志记录级别

日志记录的名称空间、级别和活动

Message Queue 提供程序定义了一组与日志记录级别和日志记录活动相关联的日志记录名称空间,以使 Message Queue 客户端能够在正确设置日志记录配置后记录连接和会话事件。

Message Queue 客户端运行时的根日志记录名称空间被定义为 javax.jms。Message Queue 客户端运行时中的所有记录程序均将此名称用作父名称空间。

用于 Message Queue 客户端运行时的日志记录级别与 java.util.logging.Level 类中定义的级别相同。此类定义了七个标准日志级别,另外还有两个用于打开和关闭日志记录的设置。

OFF

关闭日志记录。

SEVERE

最高优先级,最大值。由应用程序定义。

WARNING

由应用程序定义。

INFO

由应用程序定义。

CONFIG

由应用程序定义。

FINE

由应用程序定义。

FINER

由应用程序定义。

FINEST

最低优先级,最小值。由应用程序定义。

ALL

启用所有消息的日志记录。

通常,Message Queue 客户端运行时中发生的异常和错误由具有 javax.jms 名称空间的记录程序进行记录。

从 JVM 抛出并由客户端运行时捕获的异常(例如 IOException)由具有 javax.jms 日志记录名称空间的记录程序记录为 WARNING 级别。

从客户端运行时抛出的 JMS 异常(例如 IllegalStateException)由具有 javax.jms 日志记录名称空间的记录程序记录为 FINER 级别。

从 JVM 抛出并由客户端运行时捕获的错误(例如 OutOfMemoryError)由具有 javax.jms 日志记录名称空间的记录程序记录为 SEVERE 级别。

下表列出了可记录的事件和日志级别,要记录 JMS 连接事件和会话事件,必须设置此级别。

下表描述了连接的日志级别和事件。

表 1–5 javax.jms.connection 名称空间的日志级别和事件日志级别事件

FINE连接已创建

FINE连接已启动

FINE连接已关闭

FINE连接已断开

FINE已重新连接

FINER其他连接活动,例如 setClientID

FINEST消息、确认、Message Queue 操作和控制消息(例如提交事务)

对于会话,将在日志记录中记录以下信息。

传送给使用方的消息的每个日志记录包括 ConnectionID、SessionID 和 ConsumerID。

由生成方发送的消息的每个日志记录包括 ConnectionID、SessionID、ProducerID 和目标名称。

下表描述了会话的日志级别和事件。

表 1–6 javax.jms.session 名称空间的日志级别和事件日志级别事件

FINE会话已创建

FINE会话已关闭

FINE生成方已创建

FINE使用方已创建

FINE目标已创建

FINER其他会话活动,例如提交会话。

FINEST已生成并使用消息。(未在日志记录中记录消息属性和主体。)

默认情况下,输出日志级别是从运行应用程序所在的 JRE 继承而来的。可查看 JRE_DIRECTORY/lib/logging.properties 文件以确定该级别。

可通过编程方式或使用配置文件来配置日志记录,还可以控制进行日志记录的范围。以下部分介绍了这些可行的操作。

使用 JRE 日志记录配置文件

以下示例说明了如何在 JRE_DIRECTORY/lib/logging.properties 文件(用于设置 Java 运行环境的日志级别)中设置日志记录的名称空间和级别。使用此 JRE 的所有应用程序都将具有相同的日志记录配置。下面的样例配置将 javax.jms.connection 名称空间的日志记录级别设置为 INFO,并指定将输出写入 java.util.logging.ConsoleHandler。

#logging.properties file.

# "handlers" specifies a comma separated list of log Handler

# classes. These handlers will be installed during VM startup.

# Note that these classes must be on the system classpath.

# By default we only configure a ConsoleHandler, which will only

# show messages at the INFO and above levels.

handlers= java.util.logging.ConsoleHandler

# Default global logging level.

# This specifies which kinds of events are logged across

# all loggers. For any given facility this global level

# can be overriden by a facility-specific level.

# Note that the ConsoleHandler also has a separate level

# setting to limit messages printed to the console.

.level= INFO

# Limit the messages that are printed on the console to INFO and above.

java.util.logging.ConsoleHandler.level = INFO

java.util.logging.ConsoleHandler.formatter =

java.util.logging.SimpleFormatter

# The logger with javax.jms.connection name space will write

# Level.INFO messages to its output handler(s). In this configuration

# the ouput handler is set to java.util.logging.ConsoleHandler.

javax.jms.connection.level = INFO

为特定的应用程序使用日志记录配置文件

还可以从用于运行应用程序的 Java 命令行定义日志记录配置文件。该应用程序将使用在指定的日志记录文件中定义的配置。在以下示例中,configFile 使用的格式与 JRE_DIRECTORY/lib/logging.properties文件中定义的格式相同。

java -Djava.util.logging.config.file=configFile MQApplication

以编程方式设置日志记录配置

以下代码使用 java.util.logging API 来记录连接事件,方法是将 javax.jms.connection 名称空间的日志级别更改为 FINE。您可以在应用程序中包含此类代码,以便通过编程方式设置日志记录配置。

import java.util.logging.*;

//construct a file handler and output to the mq.log file

//in the system's temp directory.

Handler fh = new FileHandler("%t/mq.log");

fh.setLevel (Level.FINE);

//Get Logger for "javax.jms.connection" domain.

Logger logger = Logger.getLogger("javax.jms.connection");

logger.addHandler (fh);

//javax.jms.connection logger would log activities

//with level FINE and above.

logger.setLevel (Level.FINE);

 类似资料: