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ülcü
@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]