使用 JMX 通知来监视应用程序日志记录

Java 开发者可以创建程序以使用 JMX 通知来监视应用程序服务器日志。

关于此任务

大多数常用日志消息侦听器都是用 Java 编写的,他们将使用 SOAP 来连接至 Deployment Manager 或应用程序服务器。使用本主题来构建用于侦听日志事件的 Java 客户机。
注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.logSystemErr.logtrace.logactivity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。
避免故障 避免故障: 将侦听器添加到具有较大日志记录卷的服务器时一定要小心,因为 JMX 通知会降低侦听器的速度。gotcha

过程

  1. 导入必需的软件包。 在 Java 程序的开始处一般需要下列 import 语句:
    import javax.management.Notification;
    import javax.management.NotificationListener;
    import javax.management.ObjectName;
    import javax.management.InstanceNotFoundException;
    import javax.management.MalformedObjectNameException;
    
    import com.ibm.websphere.management.AdminClient;
    import com.ibm.websphere.management.AdminClientFactory;
    import com.ibm.websphere.management.exception.ConnectorException;
    此外,为了处理消息以及后续步骤中的调用所返回的类型,需要下列 import 语句。
    import java.util.Iterator;
    import java.util.Properties;
    import java.util.Set;
    import com.ibm.websphere.ras.RasMessage; 
  2. 创建用于实现 NotificationListener 接口的 Java 类。
  3. 实现 handleNotification 方法。 以下示例是一个将消息文本写至 Java 控制台的样本:
    public void handleNotification(Notification notification, Object handback) {
            RasMessage rasMessage = (RasMessage)notification.getUserData() ;
            System.out.println("Localized message: " + rasMessage.getLocalizedMessage(null));
    }
  4. 连接至要监视其 JMX MBean 的服务器的 SOAP 端口。 以下代码将使用指定的主机和指定的端口来创建一个使用 SOAP 连接的 AdminClient 对象:
            AdminClient adminClient = null ;
            String hostName = "someHostName";
            String soapPort = "8880";
    
            Properties connectProps = new Properties();
            connectProps.setProperty(AdminClient.CONNECTOR_TYPE, "SOAP");
            connectProps.setProperty(AdminClient.CONNECTOR_HOST, hostName);
            connectProps.setProperty(AdminClient.CONNECTOR_PORT, soapPort);
    
            try {
                adminClient = AdminClientFactory.createAdminClient(connectProps);
            } catch (ConnectorException e) {
                // error handling code
            } 
  5. 检索 RasLoggingService MBean 的 MBean 对象名。 以下代码将检索 RasLoggingService MBean 对象名:
            String queryString = "WebSphere:cell="+cellName+",node="+nodeName+",process="+serverName+",
    type=RasLoggingService,*" ;
            Set<ObjectName> objectMBeans = null;
            try {
                ObjectName queryName = new ObjectName(queryString);
                objectMBeans = (Set<ObjectName>)adminClient.queryNames(queryName, null);
                if (objectMBeans.size() > 1) {
                    // error handling code to deal with the case where we get more than one name returned.
                }
            } catch (MalformedObjectNameException e) {
                // error handling code
            } catch (ConnectorException e) {
                // error handling code
            }
    
            if (objectMBeans.isEmpty()) {
                // error handling code to deal with the case where the MBean is not found
            }
    
            Iterator<ObjectName> objectNames = objectMBeans.iterator() ;
            ObjectName objectName = objectNames.next() ; 
  6. 添加通知侦听器。 此样本代码将添加一个通知侦听器,在该通知侦听器处理通知时等待 60 秒,然后移除该通知侦听器。只要需要,侦听器可以一直处于连接状态。
            try {
                adminClient.addNotificationListener(objectName, this, null, null);
                Thread.sleep(60 * 1000) ;
                adminClient.removeNotificationListener(objectName, this) ;
            } catch (InstanceNotFoundException e) {
                // error handling code
            } catch (ConnectorException e) {
                // error handling code
            } catch (Exception e) {
                // error handling code
            }
  7. 将必需的 jar 添加到类路径。 将管理客户机 jar 文件添加到类路径,以便能够编译和运行您的代码。管理客户机 jar 文件位于 <install_root>/runtimes 目录。

结果

您已经创建一个 Java 程序,它可以侦听来自应用程序服务器的日志事件通知并因此而执行操作。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=ttrb_HPELNotification
文件名:ttrb_HPELNotification.html