You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by sd...@apache.org on 2005/01/04 08:57:20 UTC

cvs commit: logging-log4j/src/java/org/apache/log4j/net SMTPAppender.java

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: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Re: cvs commit: logging-log4j/src/java/org/apache/log4j/net SMTPAppender.java

Posted by Ceki Gülcü <ce...@qos.ch>.
Hello Scott,

Since we have the possibility of configuring sub-components of
components, the expression parameter should be added to instances of
the appropriate TriggeringEventEvaluator. Once of the reasons behind
the development of Joran was to address the problem of configuring
sub-components of components and in particular passing parameters to
TriggeringEventEvaluator instances was a major motivation.

In other words, I think the expression parameter should be moved from
SMTPAppender into DefaultEvaluator or even to a new Evaluator class.

Also per the guidelines for log4j components [1], DefaultEvaluator
should not invoke LogManager.getLogger().

[1] http://www.qos.ch/logging/internalLogging.jsp


At 08:57 AM 1/4/2005, you wrote:
>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

-- 
Ceki Gülcü

   The complete log4j manual: http://www.qos.ch/log4j/



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org