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ü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: 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