Package org.jboss.monitor.services

Source Code of org.jboss.monitor.services.JMXNotificationAppender

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.monitor.services;

import javax.management.ListenerNotFoundException;
import javax.management.MBeanNotificationInfo;
import javax.management.MBeanServer;
import javax.management.NotificationEmitter;
import javax.management.NotificationFilter;
import javax.management.NotificationListener;
import javax.management.ObjectName;

import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.jboss.monitor.alarm.Alarm;
import org.jboss.monitor.alarm.AlarmNotification;
import org.jboss.mx.util.JBossNotificationBroadcasterSupport;
import org.jboss.mx.util.MBeanServerLocator;


/**
* A log4j Appender that emits the received log events as JMX Notifications
*
* @author  <a href="mailto:dimitris@jboss.org">Dimitris Andreadis</a>
* @version $Revision: 81038 $
*/
public class JMXNotificationAppender extends AppenderSkeleton
   implements JMXNotificationAppenderMBean, NotificationEmitter
{
   public static final String DEFAULT_TYPE = "jboss.alarm.logging";
  
   // Private Data --------------------------------------------------

   private MBeanServer server;
  
   private ObjectName objectName;
  
   private String objectNameString;
  
   private String notificationType;
  
   private JBossNotificationBroadcasterSupport emitter;
  
   // Protected Data ------------------------------------------------
  
   // Constructors --------------------------------------------------
  
   /**
    * CTOR
    */
   public JMXNotificationAppender()
   {
      notificationType = DEFAULT_TYPE;
      server = MBeanServerLocator.locateJBoss();
      emitter = new JBossNotificationBroadcasterSupport();
     
      // Default Threadshold
      setThreshold(Level.WARN);
   }

   // Attributes ----------------------------------------------------
  
   public void setObjectName(String objectNameString) throws Exception
   {
      // in case we've registered before
      unregister();

      if (server != null)
      {
         objectName = new ObjectName(objectNameString);
         server.registerMBean(this, objectName);
      }
     
      this.objectNameString = objectNameString;
   }
  
   public String getObjectName()
   {
      return objectNameString;
   }
  
   public void setNotificationType(String notificationType)
   {
      this.notificationType = notificationType;
   }
  
   public String getNotificationType()
   {
      return notificationType;
   }
  
   // NotificationEmitter implementation ----------------------------
  
   public void addNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
   {
      // delegate
      emitter.addNotificationListener(listener, filter, handback);
   }

   public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException
   {
      // delegate
      emitter.removeNotificationListener(listener);
   }
  
   public void removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)
      throws ListenerNotFoundException
   {
      // delegate
      emitter.removeNotificationListener(listener, filter, handback);
   }

   public MBeanNotificationInfo[] getNotificationInfo()
   {
      // delegate
      return emitter.getNotificationInfo();
   }

   // Appender implementation ---------------------------------------
  
   public void close()
   {
      unregister();
     
      server = null;
      emitter = null;
      objectName = null;
      objectNameString = null;
      notificationType = null;
   }
  
   public boolean requiresLayout()
   {
     return true;
   }
  
   // AppenderSkeleton overrides ------------------------------------
  
   protected void append(LoggingEvent event)
   {
      String msg = super.layout.format(event);

      if (super.layout.ignoresThrowable())
      {
         String[] ts = event.getThrowableStrRep();
         if (ts != null)
         {
            StringBuffer sbuf = new StringBuffer(msg);

            int len = ts.length;
            for (int i = 0; i < len; i++)
            {
               sbuf.append(Layout.LINE_SEP).append(ts[i]);
            }
           
            msg = sbuf.toString();
         }
      }

      // Map level to severity
      Level level = event.getLevel();
      int severity;
     
      if (level == Level.WARN)
      {
         severity = Alarm.SEVERITY_WARNING;
      }
      else if (level == Level.ERROR)
      {
         severity = Alarm.SEVERITY_MAJOR;
      }
      else if (level == Level.FATAL)
      {
         severity = Alarm.SEVERITY_CRITICAL;
      }
      else
      {
         severity = Alarm.SEVERITY_UNKNOWN;
      }

      // create the alarm
      AlarmNotification alarm = new AlarmNotification(
            notificationType, this, null, severity, Alarm.STATE_NONE,
            emitter.nextNotificationSequenceNumber(), event.timeStamp, msg);
     
      emitter.sendNotification(alarm);
   }     
  
   // Private -------------------------------------------------------
  
   private void unregister()
   {
      if (server != null && objectName != null)
      {
         try
         {
            server.unregisterMBean(objectName);
         }
         catch (Exception ignored)
         {
            // ignored
         }
      }     
   }
}
TOP

Related Classes of org.jboss.monitor.services.JMXNotificationAppender

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.