ceki        2004/12/16 14:05:29

  Modified:    docs     HISTORY.txt
               src/java/org/apache/log4j/net SMTPAppender.java
  Log:
   - Added pattern conversion support for the Subject line for emails
     generated by  SMTPAppender. The set of patterns is the same as those
     supported by PatternLayout. [*]
  
  Revision  Changes    Path
  1.24      +5 -1      logging-log4j/docs/HISTORY.txt
  
  Index: HISTORY.txt
  ===================================================================
  RCS file: /home/cvs/logging-log4j/docs/HISTORY.txt,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- HISTORY.txt       16 Dec 2004 18:14:01 -0000      1.23
  +++ HISTORY.txt       16 Dec 2004 22:05:29 -0000      1.24
  @@ -18,8 +18,12 @@
   
    - Fixed Bugzilla 18076: setting of firstTime in OnlyOnceErrorHandler. [*]
   
  - - Implemented Bugzilla 20985: charset support for SMTPAppender [**]
  + - Added pattern conversion support for the Subject line for emails 
  +   generated by  SMTPAppender. The set of patterns is the same as those 
  +   supported by PatternLayout. [*]
   
  + - Implemented Bugzilla 20985: charset support for SMTPAppender [**]
  +  
    - Implemented Bugzilla 20500: separate registry clearing from doConfigure 
in PropertyConfigurator
      to allow to easier extension. [*]
   
  
  
  
  1.40      +42 -14    
logging-log4j/src/java/org/apache/log4j/net/SMTPAppender.java
  
  Index: SMTPAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/net/SMTPAppender.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- SMTPAppender.java 16 Dec 2004 18:08:09 -0000      1.39
  +++ SMTPAppender.java 16 Dec 2004 22:05:29 -0000      1.40
  @@ -21,9 +21,12 @@
   import org.apache.log4j.Level;
   import org.apache.log4j.helpers.CyclicBuffer;
   import org.apache.log4j.helpers.OptionConverter;
  +import org.apache.log4j.pattern.PatternConverter;
  +import org.apache.log4j.pattern.PatternParser;
   import org.apache.log4j.spi.LoggingEvent;
   import org.apache.log4j.spi.TriggeringEventEvaluator;
   
  +import java.io.StringWriter;
   import java.util.Date;
   import java.util.Properties;
   
  @@ -55,15 +58,15 @@
   public class SMTPAppender extends AppenderSkeleton {
     private String to;
     private String from;
  -  private String subject;
  +  private String subjectStr = "";
     private String smtpHost;
  -    private String charset = "ISO-8859-1";
  +  private String charset = "ISO-8859-1";
     private int bufferSize = 512;
     private boolean locationInfo = false;
     protected CyclicBuffer cb = new CyclicBuffer(bufferSize);
     protected MimeMessage msg;
     protected TriggeringEventEvaluator evaluator;
  -  
  +  private PatternConverter subjectConverterHead;
     
     /**
        The default constructor will instantiate the appender with a
  @@ -103,13 +106,13 @@
         }
   
         msg.setRecipients(Message.RecipientType.TO, parseAddress(to));
  -
  -      if (subject != null) {
  -        msg.setSubject(subject, charset);
  -      }
       } catch (MessagingException e) {
         getLogger().error("Could not activate SMTPAppender options.", e);
       }
  +
  +    if (subjectStr != null) {
  +      subjectConverterHead = new PatternParser(subjectStr).parse();
  +    }
       
       if (this.evaluator == null) {
         String errMsg = "No TriggeringEventEvaluator is set for appender 
["+getName()+"].";
  @@ -143,7 +146,7 @@
       cb.add(event);
   
       if (evaluator.isTriggeringEvent(event)) {
  -      sendBuffer();
  +      sendBuffer(event);
       }
     }
   
  @@ -212,12 +215,15 @@
     /**
        Send the contents of the cyclic buffer as an e-mail message.
      */
  -  protected void sendBuffer() {
  +  protected void sendBuffer(LoggingEvent triggeringEvent) {
       // Note: this code already owns the monitor for this
       // appender. This frees us from needing to synchronize on 'cb'.
       try {
         MimeBodyPart part = new MimeBodyPart();
  -
  +      
  +      String computedSubject = computeSubject(triggeringEvent);
  +      msg.setSubject(computedSubject, charset);
  +      
         StringBuffer sbuf = new StringBuffer();
         String t = layout.getHeader();
   
  @@ -263,6 +269,20 @@
       }
     }
   
  +  String computeSubject(LoggingEvent triggeringEvent) {
  +    PatternConverter c = this.subjectConverterHead;
  +    StringWriter sw = new StringWriter();
  +    try {
  +      while (c != null) {
  +        c.format(sw, triggeringEvent);
  +        c = c.next;
  +      }
  +    } catch(java.io.IOException ie) {
  +      // this should not happen
  +    }
  +    return sw.toString();
  +  }
  +  
     /**
        Returns value of the <b>EvaluatorClass</b> option.
      */
  @@ -281,7 +301,7 @@
        Returns value of the <b>Subject</b> option.
      */
     public String getSubject() {
  -    return subject;
  +    return subjectStr;
     }
   
     /**
  @@ -293,11 +313,19 @@
     }
   
     /**
  -     The <b>Subject</b> option takes a string value which should be a
  -     the subject of the e-mail message.
  +   * The <b>Subject</b> option takes a string value which will be the 
subject 
  +   * of the e-mail message. This value can be string literal or a conversion 
  +   * pattern in the same format as expected by 
  +   * [EMAIL PROTECTED] org.apache.log4j.PatternLayout}.
  +   * 
  +   * <p>The conversion pattern is applied on the triggering event to 
dynamically
  +   * compute the subject of the outging email message. For example, setting 
  +   * the <b>Subject</b> option to "%properties{host} - %m"
  +   * will set the subject of outgoing message to the "host" property of the 
  +   * triggering event followed by the message of the triggering event.
      */
     public void setSubject(String subject) {
  -    this.subject = subject;
  +    this.subjectStr = subject;
     }
   
     /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to