You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cr...@apache.org on 2002/04/17 11:49:56 UTC

cvs commit: jakarta-avalon-logkit/src/java/org/apache/log/output/net SMTPOutputLogTarget.java

crafterm    02/04/17 02:49:56

  Added:       src/java/org/apache/log/output/net SMTPOutputLogTarget.java
  Log:
  Initial revision of an SMTP logkit output target. Using this class log
  events can be sent to email and/or email gateway (eg. email->sms)
  destinations.
  
  Revision  Changes    Path
  1.1                  jakarta-avalon-logkit/src/java/org/apache/log/output/net/SMTPOutputLogTarget.java
  
  Index: SMTPOutputLogTarget.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.log.output.net;
  
  import java.util.Date;
  import java.util.Properties;
  
  import javax.mail.Address;
  import javax.mail.Message;
  import javax.mail.MessagingException;
  import javax.mail.Session;
  import javax.mail.Transport;
  import javax.mail.internet.InternetAddress;
  import javax.mail.internet.MimeMessage;
  
  import org.apache.log.output.AbstractOutputTarget;
  import org.apache.log.format.Formatter;
  
  /**
   * Logkit output target that logs data via SMTP (ie. email, email gateways).
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: SMTPOutputLogTarget.java,v 1.1 2002/04/17 09:49:56 crafterm Exp $
   * @since 1.1.0
   */
  public class SMTPOutputLogTarget extends AbstractOutputTarget
  {
      // Mail session
      private final Session m_session;
  
      // Message to be sent
      private Message m_message;
  
      // Address to sent mail to
      private final Address[] m_toAddresses;
  
      // Address to mail is to be listed as sent from
      private final Address m_fromAddress;
  
      // Mail subject
      private final String m_subject;
  
      // Current size of mail, in units of log events
      private int m_msgSize;
  
      // Maximum size of mail, in units of log events
      private final int m_maxMsgSize;
  
      // Buffer containing current mail
      private StringBuffer m_buffer;
  
      /**
       * SMTPOutputLogTarget constructor, creates a logkit output target
       * capable of logging to SMTP (ie. email, email gateway) targets.
       *
       * @param session mail session to be used
       * @param toAddresses addresses logs should be sent to
       * @param fromAddress address logs say they come from
       * @param subject subject line logs should use
       * @param maxMsgSize maximum size of any log mail, in units of log events
       * @param formatter log formatter to use
       */
      public SMTPOutputLogTarget(
          final Session session,
          final Address[] toAddresses,
          final Address fromAddress,
          final String subject,
          final int maxMsgSize,
          final Formatter formatter
      )
      {
          super( formatter );
  
          // setup log target
          m_maxMsgSize = maxMsgSize;
          m_toAddresses = toAddresses;
          m_fromAddress = fromAddress;
          m_subject = subject;
          m_session = session;
  
          // ready for business
          open();
      }
  
      /**
       * Method to write data to the log target. Logging data is stored in 
       * an internal buffer until the size limit is reached. When this happens
       * the data is sent to the SMTP target, and the buffer is reset for
       * subsequent events.
       *
       * @param data logging data to be written to target
       */
      protected void write( final String data )
      {
          try
          {
              // ensure we have a message object available
              if ( m_message == null )
              {
                  m_message = new MimeMessage( m_session );
                  m_message.setFrom( m_fromAddress );
                  m_message.setRecipients( Message.RecipientType.TO, m_toAddresses );
                  m_message.setSubject( m_subject );
                  m_message.setSentDate( new Date() );
                  m_msgSize = 0;
                  m_buffer = new StringBuffer();
              }
  
              // add the data to the buffer, separated by a newline
              m_buffer.append( data );
              m_buffer.append( '\n' );
              ++m_msgSize;
  
              // send mail if message size has reached it's size limit
              if ( m_msgSize >= m_maxMsgSize )
                  send();
          }
          catch ( MessagingException e )
          {
              getErrorHandler().error( "Error creating message", e, null );
          }
      }
  
      /**
       * Closes this log target. Sends currently buffered message, if existing.
       */
      public synchronized void close()
      {
          super.close();
          send();
      }
  
      /**
       * Method to enable/disable debugging on the mail session.
       *
       * @param flag true to enable debugging, false to disable it
       */
      public void setDebug( boolean flag )
      {
          m_session.setDebug( flag );               
      }
  
      /**
       * Helper method to send the currently buffered message,
       * if existing.
       */
      private void send()
      {
          try
          {
              if ( m_message != null && m_buffer != null )
              {
                  m_message.setText( m_buffer.toString() );
                  Transport.send( m_message );
                  m_message = null;
              }
          }
          catch ( MessagingException e )
          {
              getErrorHandler().error( "Error sending message", e, null );
          }
      }
  }
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>