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]