[LOGBack-dev] svn commit: r566 - in logback/trunk: logback-classic logback-classic/src/main/java/ch/qos/logback/classic/net logback-classic/src/test/java/ch/qos/logback/classic/net logback-core logback-core/src/main/java/ch/qos/logback/core/net

noreply.seb at qos.ch noreply.seb at qos.ch
Tue Sep 12 17:20:42 CEST 2006


Author: seb
Date: Tue Sep 12 17:20:42 2006
New Revision: 566

Added:
   logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java
Modified:
   logback/trunk/logback-classic/pom.xml
   logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java
   logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppenderTest.java
   logback/trunk/logback-core/pom.xml

Log:
- added a SMTPAppenderBase class in logback core
- modified SMTPAppender accordingly
- updated tests
- updated pom.xml files

Modified: logback/trunk/logback-classic/pom.xml
==============================================================================
--- logback/trunk/logback-classic/pom.xml	(original)
+++ logback/trunk/logback-classic/pom.xml	Tue Sep 12 17:20:42 2006
@@ -36,12 +36,6 @@
 			<artifactId>logback-core</artifactId>
 			<scope>compile</scope>
 		</dependency>
-			
-		<dependency>
-			<groupId>javax.mail</groupId>
-			<artifactId>mail</artifactId>
-			<scope>compile</scope>
-		</dependency>
 		
 		<dependency>
 			<groupId>dom4j</groupId>
@@ -50,6 +44,12 @@
 		</dependency>
 		
 		<dependency>
+			<groupId>javax.mail</groupId>
+			<artifactId>mail</artifactId>
+			<scope>test</scope>
+		</dependency>
+		
+		<dependency>
 			<groupId>ch.qos.logback</groupId>
 			<artifactId>logback-core</artifactId>
 			<classifier>tests</classifier>

Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java	(original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java	Tue Sep 12 17:20:42 2006
@@ -11,27 +11,12 @@
 package ch.qos.logback.classic.net;
 
 import java.io.File;
-import java.util.Date;
-import java.util.Properties;
-
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Multipart;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
 
 import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.helpers.CyclicBuffer;
 import ch.qos.logback.classic.spi.LoggingEvent;
-import ch.qos.logback.core.AppenderBase;
-import ch.qos.logback.core.Layout;
+import ch.qos.logback.core.net.SMTPAppenderBase;
 import ch.qos.logback.core.rolling.TriggeringPolicy;
-import ch.qos.logback.core.util.OptionHelper;
 
 /**
  * Send an e-mail when a specific logging event occurs, typically on errors or
@@ -47,22 +32,11 @@
  * @author Ceki G&uuml;lc&uuml;
  * @author S&eacute;bastien Pennec
  * 
- * @since 1.0
  */
-public class SMTPAppender extends AppenderBase {
-  private Layout layout;
+public class SMTPAppender extends SMTPAppenderBase {
 
-  private String to;
-  private String from;
-  private String subject;
-  private String smtpHost;
   private int bufferSize = 512;
-  private boolean locationInfo = false;
-
   protected CyclicBuffer cb = new CyclicBuffer(bufferSize);
-  protected Message msg;
-
-  protected TriggeringPolicy evaluator;
 
   /**
    * The default constructor will instantiate the appender with a
@@ -82,194 +56,33 @@
   }
 
   /**
-   * Start the appender
-   */
-  public void start() {
-    Properties props = new Properties(System.getProperties());
-    if (smtpHost != null) {
-      props.put("mail.smtp.host", smtpHost);
-    }
-
-    Session session = Session.getInstance(props, null);
-    // session.setDebug(true);
-    msg = new MimeMessage(session);
-
-    try {
-      if (from != null) {
-        msg.setFrom(getAddress(from));
-      } else {
-        msg.setFrom();
-      }
-
-      msg.setRecipients(Message.RecipientType.TO, parseAddress(to));
-      if (subject != null) {
-        msg.setSubject(subject);
-      }
-
-      started = true;
-
-    } catch (MessagingException e) {
-      addError("Could not activate SMTPAppender options.", e);
-    }
-  }
-
-  /**
    * Perform SMTPAppender specific appending actions, mainly adding the event to
-   * a cyclic buffer and checking if the event triggers an e-mail to be sent.
+   * a cyclic buffer.
    */
-  protected void append(Object eventObject) {
+  protected void subAppend(Object eventObject) {
     LoggingEvent event = (LoggingEvent) eventObject;
 
-    if (!checkEntryConditions()) {
-      return;
-    }
-
     event.getThreadName();
-    // if (locationInfo) {
-    // event.getLocationInformation();
-    // }
     cb.add(event);
     // addInfo("Added event to the cyclic buffer: " + event.getMessage());
-
-    if (evaluator.isTriggeringEvent(null, event)) {
-      sendBuffer();
-    }
   }
 
-  /**
-   * This method determines if there is a sense in attempting to append.
-   * 
-   * <p>
-   * It checks whether there is a set output target and also if there is a set
-   * layout. If these checks fail, then the boolean value <code>false</code>
-   * is returned.
-   */
-  protected boolean checkEntryConditions() {
-    if (this.msg == null) {
-      addError("Message object not configured.");
-      return false;
-    }
-
-    if (this.evaluator == null) {
-      addError("No TriggeringPolicy is set for appender [" + name + "].");
-      return false;
+  @Override
+  protected void fillBuffer(StringBuffer sbuf) {
+    int len = cb.length();
+    for (int i = 0; i < len; i++) {
+      // sbuf.append(MimeUtility.encodeText(layout.format(cb.get())));
+      LoggingEvent event = cb.get();
+      sbuf.append(layout.doLayout(event));
+      // if (layout.ignoresThrowable()) {
+      // String[] s = event.getThrowableStrRep();
+      // if (s != null) {
+      // for (int j = 0; j < s.length; j++) {
+      // sbuf.append(s[j]);
+      // }
+      // }
+      // }
     }
-
-    if (this.layout == null) {
-      addError("No layout set for appender named [" + name + "].");
-      return false;
-    }
-    return true;
-  }
-
-  synchronized public void stop() {
-    this.started = false;
-  }
-
-  InternetAddress getAddress(String addressStr) {
-    try {
-      return new InternetAddress(addressStr);
-    } catch (AddressException e) {
-      addError("Could not parse address [" + addressStr + "].", e);
-      return null;
-    }
-  }
-
-  InternetAddress[] parseAddress(String addressStr) {
-    try {
-      return InternetAddress.parse(addressStr, true);
-    } catch (AddressException e) {
-      addError("Could not parse address [" + addressStr + "].", e);
-      return null;
-    }
-  }
-
-  /**
-   * Returns value of the <b>To</b> option.
-   */
-  public String getTo() {
-    return to;
-  }
-
-  /**
-   * Send the contents of the cyclic buffer as an e-mail message.
-   */
-  protected void sendBuffer() {
-
-    // Note: this code already owns the monitor for this
-    // appender. This frees us from needing to synchronize on 'cb'.
-    try {
-      MimeBodyPart part = new MimeBodyPart();
-
-      StringBuffer sbuf = new StringBuffer();
-      String t = layout.getHeader();
-      if (t != null)
-        sbuf.append(t);
-      int len = cb.length();
-      for (int i = 0; i < len; i++) {
-        // sbuf.append(MimeUtility.encodeText(layout.format(cb.get())));
-        LoggingEvent event = cb.get();
-        sbuf.append(layout.doLayout(event));
-        // if (layout.ignoresThrowable()) {
-        // String[] s = event.getThrowableStrRep();
-        // if (s != null) {
-        // for (int j = 0; j < s.length; j++) {
-        // sbuf.append(s[j]);
-        // }
-        // }
-        // }
-      }
-      t = layout.getFooter();
-      if (t != null)
-        sbuf.append(t);
-      part.setContent(sbuf.toString(), "text/plain");
-
-      Multipart mp = new MimeMultipart();
-      mp.addBodyPart(part);
-      msg.setContent(mp);
-
-      msg.setSentDate(new Date());
-      Transport.send(msg);
-    } catch (Exception e) {
-      addError("Error occured while sending e-mail notification.", e);
-    }
-  }
-
-  /**
-   * Returns value of the <b>EvaluatorClass</b> option.
-   */
-  public String getEvaluatorClass() {
-    return evaluator == null ? null : evaluator.getClass().getName();
-  }
-
-  /**
-   * Returns value of the <b>From</b> option.
-   */
-  public String getFrom() {
-    return from;
-  }
-
-  /**
-   * Returns value of the <b>Subject</b> option.
-   */
-  public String getSubject() {
-    return subject;
-  }
-
-  /**
-   * The <b>From</b> option takes a string value which should be a e-mail
-   * address of the sender.
-   */
-  public void setFrom(String from) {
-    this.from = from;
-  }
-
-  /**
-   * The <b>Subject</b> option takes a string value which should be a the
-   * subject of the e-mail message.
-   */
-  public void setSubject(String subject) {
-    this.subject = subject;
   }
 
   /**
@@ -285,79 +98,11 @@
   }
 
   /**
-   * The <b>SMTPHost</b> option takes a string value which should be a the host
-   * name of the SMTP server that will send the e-mail message.
-   */
-  public void setSMTPHost(String smtpHost) {
-    this.smtpHost = smtpHost;
-  }
-
-  /**
-   * Returns value of the <b>SMTPHost</b> option.
-   */
-  public String getSMTPHost() {
-    return smtpHost;
-  }
-
-  /**
-   * The <b>To</b> option takes a string value which should be a comma
-   * separated list of e-mail address of the recipients.
-   */
-  public void setTo(String to) {
-    this.to = to;
-  }
-
-  /**
    * Returns value of the <b>BufferSize</b> option.
    */
   public int getBufferSize() {
     return bufferSize;
   }
-
-  /**
-   * The <b>EvaluatorClass</b> option takes a string value representing the
-   * name of the class implementing the {@link TriggeringEventEvaluator}
-   * interface. A corresponding object will be instantiated and assigned as the
-   * triggering event evaluator for the SMTPAppender.
-   */
-  public void setEvaluatorClass(String value) {
-    try {
-      evaluator = (TriggeringPolicy) OptionHelper.instantiateByClassName(value,
-          TriggeringPolicy.class);
-    } catch (Exception ex) {
-      addError("Evaluator class instanciation failed");
-    }
-  }
-
-  /**
-   * The <b>LocationInfo</b> option takes a boolean value. By default, it is
-   * set to false which means there will be no effort to extract the location
-   * information related to the event. As a result, the layout that formats the
-   * events as they are sent out in an e-mail is likely to place the wrong
-   * location information (if present in the format).
-   * 
-   * <p>
-   * Location information extraction is comparatively very slow and should be
-   * avoided unless performance is not a concern.
-   */
-  public void setLocationInfo(boolean locationInfo) {
-    this.locationInfo = locationInfo;
-  }
-
-  /**
-   * Returns value of the <b>LocationInfo</b> option.
-   */
-  public boolean getLocationInfo() {
-    return locationInfo;
-  }
-
-  public Layout getLayout() {
-    return layout;
-  }
-
-  public void setLayout(Layout layout) {
-    this.layout = layout;
-  }
 }
 
 class DefaultEvaluator implements TriggeringPolicy {

Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppenderTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppenderTest.java	(original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppenderTest.java	Tue Sep 12 17:20:42 2006
@@ -12,102 +12,101 @@
 
 public class SMTPAppenderTest extends TestCase {
 
-	SMTPAppender appender;
+  SMTPAppender appender;
 
-	public void setUp() throws Exception {
-		super.setUp();
-		LoggerContext lc = new LoggerContext();
-		appender = new SMTPAppender();
-		appender.setContext(lc);
-		appender.setName("smtp");
-		appender.setFrom("user at host.dom");
-		appender.setLayout(buildLayout(lc));
-		appender.setSMTPHost("mail2.qos.ch");
-		appender.setSubject("logging report");
-		appender.setTo("sebastien.nospam at qos.ch");
-		appender.start();
-	}
-	
-	public void tearDown() throws Exception {
-		super.tearDown();
-		appender = null;
-	}
-	
-	public void testStart() {
-		try {
-		Address[] addressArray = appender.msg.getFrom();
-		Address address = addressArray[0];
-		assertEquals("user at host.dom", address.toString());
-		
-		addressArray = null;
-		address = null;
-		
-		addressArray = appender.msg.getAllRecipients();
-		address = addressArray[0];
-		assertEquals("sebastien.nospam at qos.ch", address.toString());
-		
-		assertEquals("logging report", appender.msg.getSubject());
-		
-		assertTrue(appender.isStarted());
-		
-		} catch (MessagingException ex) {
-			fail("Unexpected exception.");
-		}
-	}
-
-	public void testAppendNonTriggeringEvent() {
-		LoggingEvent event = new LoggingEvent();
-		event.setThreadName("thead name");
-		event.setLevel(Level.DEBUG);
-		appender.append(event);
-		assertEquals(1, appender.cb.length());
-	}
-	
-	public void testEntryConditionsCheck() {
-		appender.checkEntryConditions();
-		assertEquals(0, appender.getContext().getStatusManager().getCount());		
-	}
-	
-	public void testEntryConditionsCheckNoMessage() {
-		appender.msg = null;
-		appender.checkEntryConditions();
-		assertEquals(1, appender.getContext().getStatusManager().getCount());
-	}
-	
-	public void testEntryConditionsCheckNoEvaluator() {
-		appender.evaluator = null;
-		appender.checkEntryConditions();
-		assertEquals(1, appender.getContext().getStatusManager().getCount());
-	}
-	
-	public void testEntryConditionsCheckNoLayout() {
-		appender.setLayout(null);
-		appender.checkEntryConditions();
-		assertEquals(1, appender.getContext().getStatusManager().getCount());
-	}
-	
-
-	public void testDefaultEvaluatorNoTrigger() {
-		DefaultEvaluator evaluator = new DefaultEvaluator();
-		LoggingEvent le = new LoggingEvent();
-		le.setLevel(Level.DEBUG);
-		assertFalse(evaluator.isTriggeringEvent(null,le));
-	}
-	
-	public void testDefaultEvaluatorTrigger() {
-		DefaultEvaluator evaluator = new DefaultEvaluator();
-		LoggingEvent le = new LoggingEvent();
-		le.setLevel(Level.ERROR);
-		assertTrue(evaluator.isTriggeringEvent(null,le));
-	}
-	
-	private static Layout buildLayout(LoggerContext lc) {
-		PatternLayout layout = new PatternLayout();
-		layout.setContext(lc);
-		layout.setHeader("Some header\n");
-		layout.setPattern("%-4relative [%thread] %-5level %class - %msg%n");
-		layout.setFooter("Some footer");
-		layout.start();
-		return layout;
-	}
+  public void setUp() throws Exception {
+    super.setUp();
+    LoggerContext lc = new LoggerContext();
+    appender = new SMTPAppender();
+    appender.setContext(lc);
+    appender.setName("smtp");
+    appender.setFrom("user at host.dom");
+    appender.setLayout(buildLayout(lc));
+    appender.setSMTPHost("mail2.qos.ch");
+    appender.setSubject("logging report");
+    appender.setTo("sebastien.nospam at qos.ch");
+    appender.start();
+  }
+
+  public void tearDown() throws Exception {
+    super.tearDown();
+    appender = null;
+  }
+
+  public void testStart() {
+    try {
+      Address[] addressArray = appender.getMessage().getFrom();
+      Address address = addressArray[0];
+      assertEquals("user at host.dom", address.toString());
+
+      addressArray = null;
+      address = null;
+
+      addressArray = appender.getMessage().getAllRecipients();
+      address = addressArray[0];
+      assertEquals("sebastien.nospam at qos.ch", address.toString());
+
+      assertEquals("logging report", appender.getMessage().getSubject());
+
+      assertTrue(appender.isStarted());
+
+    } catch (MessagingException ex) {
+      fail("Unexpected exception.");
+    }
+  }
+
+  public void testAppendNonTriggeringEvent() {
+    LoggingEvent event = new LoggingEvent();
+    event.setThreadName("thead name");
+    event.setLevel(Level.DEBUG);
+    appender.subAppend(event);
+    assertEquals(1, appender.cb.length());
+  }
+
+  public void testEntryConditionsCheck() {
+    appender.checkEntryConditions();
+    assertEquals(0, appender.getContext().getStatusManager().getCount());
+  }
+
+  public void testEntryConditionsCheckNoMessage() {
+    appender.setMessage(null);
+    appender.checkEntryConditions();
+    assertEquals(1, appender.getContext().getStatusManager().getCount());
+  }
+
+  public void testEntryConditionsCheckNoEvaluator() {
+    appender.setEvaluator(null);
+    appender.checkEntryConditions();
+    assertEquals(1, appender.getContext().getStatusManager().getCount());
+  }
+
+  public void testEntryConditionsCheckNoLayout() {
+    appender.setLayout(null);
+    appender.checkEntryConditions();
+    assertEquals(1, appender.getContext().getStatusManager().getCount());
+  }
+
+  public void testDefaultEvaluatorNoTrigger() {
+    DefaultEvaluator evaluator = new DefaultEvaluator();
+    LoggingEvent le = new LoggingEvent();
+    le.setLevel(Level.DEBUG);
+    assertFalse(evaluator.isTriggeringEvent(null, le));
+  }
+
+  public void testDefaultEvaluatorTrigger() {
+    DefaultEvaluator evaluator = new DefaultEvaluator();
+    LoggingEvent le = new LoggingEvent();
+    le.setLevel(Level.ERROR);
+    assertTrue(evaluator.isTriggeringEvent(null, le));
+  }
+
+  private static Layout buildLayout(LoggerContext lc) {
+    PatternLayout layout = new PatternLayout();
+    layout.setContext(lc);
+    layout.setHeader("Some header\n");
+    layout.setPattern("%-4relative [%thread] %-5level %class - %msg%n");
+    layout.setFooter("Some footer");
+    layout.start();
+    return layout;
+  }
 }

Modified: logback/trunk/logback-core/pom.xml
==============================================================================
--- logback/trunk/logback-core/pom.xml	(original)
+++ logback/trunk/logback-core/pom.xml	Tue Sep 12 17:20:42 2006
@@ -35,6 +35,11 @@
 			<groupId>janino</groupId>
 			<artifactId>janino</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>javax.mail</groupId>
+			<artifactId>mail</artifactId>
+			<scope>compile</scope>
+		</dependency>
 	</dependencies>
 
 

Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java
==============================================================================
--- (empty file)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java	Tue Sep 12 17:20:42 2006
@@ -0,0 +1,285 @@
+/**
+ * Logback: the reliable, generic, fast and flexible logging framework.
+ * 
+ * Copyright (C) 1999-2006, QOS.ch
+ * 
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
+
+package ch.qos.logback.core.net;
+
+import java.util.Date;
+import java.util.Properties;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import ch.qos.logback.core.AppenderBase;
+import ch.qos.logback.core.Layout;
+import ch.qos.logback.core.rolling.TriggeringPolicy;
+import ch.qos.logback.core.util.OptionHelper;
+
+/**
+ * An abstract class that provides basic support for
+ * sending events to an email address.
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ * @author S&eacute;bastien Pennec
+ * 
+ */
+public abstract class SMTPAppenderBase extends AppenderBase {
+  protected Layout layout;
+
+  private String to;
+  private String from;
+  private String subject;
+  private String smtpHost;
+
+  protected Message msg;
+
+  protected TriggeringPolicy evaluator;
+
+  /**
+   * Start the appender
+   */
+  public void start() {
+    Properties props = new Properties(System.getProperties());
+    if (smtpHost != null) {
+      props.put("mail.smtp.host", smtpHost);
+    }
+
+    Session session = Session.getInstance(props, null);
+    // session.setDebug(true);
+    msg = new MimeMessage(session);
+
+    try {
+      if (from != null) {
+        msg.setFrom(getAddress(from));
+      } else {
+        msg.setFrom();
+      }
+
+      msg.setRecipients(Message.RecipientType.TO, parseAddress(to));
+      if (subject != null) {
+        msg.setSubject(subject);
+      }
+
+      started = true;
+
+    } catch (MessagingException e) {
+      addError("Could not activate SMTPAppender options.", e);
+    }
+  }
+
+  /**
+   * Perform SMTPAppender specific appending actions, delegating some
+   * of them to a subclass and checking if the event triggers an e-mail to be sent.
+   */
+  protected void append(Object eventObject) {
+
+    if (!checkEntryConditions()) {
+      return;
+    }
+
+    subAppend(eventObject);
+
+    if (evaluator.isTriggeringEvent(null, eventObject)) {
+      sendBuffer();
+    }
+  }
+  
+  abstract protected void subAppend(Object eventObject);
+
+  /**
+   * This method determines if there is a sense in attempting to append.
+   * 
+   * <p>
+   * It checks whether there is a set output target and also if there is a set
+   * layout. If these checks fail, then the boolean value <code>false</code>
+   * is returned.
+   */
+  public boolean checkEntryConditions() {
+    if (this.msg == null) {
+      addError("Message object not configured.");
+      return false;
+    }
+
+    if (this.evaluator == null) {
+      addError("No TriggeringPolicy is set for appender [" + name + "].");
+      return false;
+    }
+
+    if (this.layout == null) {
+      addError("No layout set for appender named [" + name + "].");
+      return false;
+    }
+    return true;
+  }
+
+  synchronized public void stop() {
+    this.started = false;
+  }
+
+  InternetAddress getAddress(String addressStr) {
+    try {
+      return new InternetAddress(addressStr);
+    } catch (AddressException e) {
+      addError("Could not parse address [" + addressStr + "].", e);
+      return null;
+    }
+  }
+
+  InternetAddress[] parseAddress(String addressStr) {
+    try {
+      return InternetAddress.parse(addressStr, true);
+    } catch (AddressException e) {
+      addError("Could not parse address [" + addressStr + "].", e);
+      return null;
+    }
+  }
+
+  /**
+   * Returns value of the <b>To</b> option.
+   */
+  public String getTo() {
+    return to;
+  }
+
+  /**
+   * Send the contents of the cyclic buffer as an e-mail message.
+   */
+  protected void sendBuffer() {
+
+    // Note: this code already owns the monitor for this
+    // appender. This frees us from needing to synchronize on 'cb'.
+    try {
+      MimeBodyPart part = new MimeBodyPart();
+
+      StringBuffer sbuf = new StringBuffer();
+      String t = layout.getHeader();
+      fillBuffer(sbuf);
+      t = layout.getFooter();
+      if (t != null)
+        sbuf.append(t);
+      part.setContent(sbuf.toString(), "text/plain");
+
+      Multipart mp = new MimeMultipart();
+      mp.addBodyPart(part);
+      msg.setContent(mp);
+
+      msg.setSentDate(new Date());
+      Transport.send(msg);
+    } catch (Exception e) {
+      addError("Error occured while sending e-mail notification.", e);
+    }
+  }
+  
+  abstract protected void fillBuffer(StringBuffer sbuf); 
+
+  /**
+   * Returns value of the <b>EvaluatorClass</b> option.
+   */
+  public String getEvaluatorClass() {
+    return evaluator == null ? null : evaluator.getClass().getName();
+  }
+
+  /**
+   * Returns value of the <b>From</b> option.
+   */
+  public String getFrom() {
+    return from;
+  }
+
+  /**
+   * Returns value of the <b>Subject</b> option.
+   */
+  public String getSubject() {
+    return subject;
+  }
+
+  /**
+   * The <b>From</b> option takes a string value which should be a e-mail
+   * address of the sender.
+   */
+  public void setFrom(String from) {
+    this.from = from;
+  }
+
+  /**
+   * The <b>Subject</b> option takes a string value which should be a the
+   * subject of the e-mail message.
+   */
+  public void setSubject(String subject) {
+    this.subject = subject;
+  }
+
+  /**
+   * The <b>SMTPHost</b> option takes a string value which should be a the host
+   * name of the SMTP server that will send the e-mail message.
+   */
+  public void setSMTPHost(String smtpHost) {
+    this.smtpHost = smtpHost;
+  }
+
+  /**
+   * Returns value of the <b>SMTPHost</b> option.
+   */
+  public String getSMTPHost() {
+    return smtpHost;
+  }
+
+  /**
+   * The <b>To</b> option takes a string value which should be a comma
+   * separated list of e-mail address of the recipients.
+   */
+  public void setTo(String to) {
+    this.to = to;
+  }
+  
+  //for testing purpose only
+  public Message getMessage() {
+    return msg;
+  }
+  
+  //for testing purpose only
+  public void setMessage(Message msg) {
+    this.msg = msg;
+  }
+  
+  public void setEvaluator(TriggeringPolicy evaluator) {
+    this.evaluator = evaluator;
+  }
+
+  /**
+   * The <b>EvaluatorClass</b> option takes a string value representing the
+   * name of the class implementing the {@link TriggeringEventEvaluator}
+   * interface. A corresponding object will be instantiated and assigned as the
+   * triggering event evaluator for the SMTPAppender.
+   */
+  public void setEvaluatorClass(String value) {
+    try {
+      evaluator = (TriggeringPolicy) OptionHelper.instantiateByClassName(value,
+          TriggeringPolicy.class);
+    } catch (Exception ex) {
+      addError("Evaluator class instanciation failed");
+    }
+  }
+  
+  public Layout getLayout() {
+    return layout;
+  }
+
+  public void setLayout(Layout layout) {
+    this.layout = layout;
+  }
+}



More information about the logback-dev mailing list