sdeboy      2005/01/03 23:57:20

  Modified:    src/java/org/apache/log4j/net SMTPAppender.java
  Log:
  SMTPAppender now supports an optional 'expression' param that will cause 
DefaultEvaluator to use ExpressionRule for trigger evaluation.
  
  NOTE: TriggeringEventEvaluator and o.a.l.Rule appear similar enough to 
support consolidation
  
  Revision  Changes    Path
  1.41      +73 -13    
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.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- SMTPAppender.java 16 Dec 2004 22:05:29 -0000      1.40
  +++ SMTPAppender.java 4 Jan 2005 07:57:20 -0000       1.41
  @@ -16,20 +16,9 @@
   
   package org.apache.log4j.net;
   
  -import org.apache.log4j.AppenderSkeleton;
  -import org.apache.log4j.Layout;
  -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;
  -
   import javax.mail.Message;
   import javax.mail.MessagingException;
   import javax.mail.Multipart;
  @@ -40,6 +29,18 @@
   import javax.mail.internet.MimeBodyPart;
   import javax.mail.internet.MimeMessage;
   import javax.mail.internet.MimeMultipart;
  +import org.apache.log4j.AppenderSkeleton;
  +import org.apache.log4j.Layout;
  +import org.apache.log4j.Level;
  +import org.apache.log4j.LogManager;
  +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.rule.ExpressionRule;
  +import org.apache.log4j.rule.Rule;
  +import org.apache.log4j.spi.LoggingEvent;
  +import org.apache.log4j.spi.TriggeringEventEvaluator;
   
   
   /**
  @@ -52,7 +53,26 @@
      <code>BufferSize</code> logging events in its cyclic buffer. This
      keeps memory requirements at a reasonable level while still
      delivering useful application context.
  -
  +   
  +   <p>There are three ways in which the trigger is fired, resulting in an 
email
  +   containing the buffered events:
  +   
  +   <p>* DEFAULT BEHAVIOR: relies on an internal TriggeringEventEvaluator 
class that 
  +   triggers the sending of an email when an event with a severity of ERROR 
or greater is received.
  +   <p>* Set the 'evaluatorClass' param to the fully qualified class name of 
a class you 
  +   have written that implements the TriggeringEventEvaluator interface.
  +   <p>* Set the 'expression' param to a valid (infix) expression supported 
by ExpressionRule and 
  +   ExpressionRule's supported operators and operands.
  +   
  +   As events are received, events are evaluated against the expression rule. 
 An event
  +   that causes the rule to evaluate to true triggers the email send.
  +   
  +   If both evaluatorClass and expression params are set, the evaluatorClass 
is used.
  +   
  +   See org.apache.log4j.rule.ExpressionRule for a more information.
  +   
  +   <p>
  +   
      @author Ceki G&uuml;lc&uuml;
      @since 1.0 */
   public class SMTPAppender extends AppenderSkeleton {
  @@ -65,6 +85,7 @@
     private boolean locationInfo = false;
     protected CyclicBuffer cb = new CyclicBuffer(bufferSize);
     protected MimeMessage msg;
  +  private String expression;
     protected TriggeringEventEvaluator evaluator;
     private PatternConverter subjectConverterHead;
     
  @@ -296,6 +317,29 @@
     public String getFrom() {
       return from;
     }
  +  
  +  /**
  +   * Returns the expression
  +   * 
  +   * @return expression
  +   */
  +  public String getExpression() {
  +    return expression;
  +  }
  +  
  +  /**
  +   * Set an expression used to determine when the sending of an email is 
triggered.
  +   * 
  +   * Only use an expression to evaluate if the 'evaluatorClass' param is not 
provided.
  +   * @param expression
  +   */
  +  public void setExpression(String expression) {
  +    
  +    if (!(evaluator instanceof DefaultEvaluator)) {
  +      this.expression = expression;
  +      evaluator = new DefaultEvaluator(expression);
  +    }
  +  }
   
     /**
        Returns value of the <b>Subject</b> option.
  @@ -426,6 +470,19 @@
   
   
   class DefaultEvaluator implements TriggeringEventEvaluator {
  +
  +  private Rule expressionRule;
  +  
  +  public DefaultEvaluator() {}
  +  
  +  public DefaultEvaluator(String expression) {
  +    try {
  +      expressionRule = ExpressionRule.getRule(expression);
  +    } catch (IllegalArgumentException iae) {
  +      LogManager.getLogger(SMTPAppender.class).error("Unable to use provided 
expression - falling back to default behavior (trigger on ERROR or greater 
severity)", iae);
  +    }
  +  }
  +  
     /**
        Is this <code>event</code> the e-mail triggering event?
   
  @@ -433,6 +490,9 @@
        has ERROR level or higher. Otherwise it returns
        <code>false</code>. */
     public boolean isTriggeringEvent(LoggingEvent event) {
  -    return event.getLevel().isGreaterOrEqual(Level.ERROR);
  +    if (expressionRule == null) {
  +      return event.getLevel().isGreaterOrEqual(Level.ERROR);
  +    }
  +    return expressionRule.evaluate(event);
     }
   }
  
  
  

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

Reply via email to