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]