Index: lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java,v diff -u -r1.6.2.3 -r1.6.2.4 --- lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java 18 Feb 2016 05:25:13 -0000 1.6.2.3 +++ lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java 3 Mar 2016 12:24:17 -0000 1.6.2.4 @@ -2,6 +2,10 @@ import java.io.UnsupportedEncodingException; import java.security.InvalidParameterException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; import javax.mail.MessagingException; import javax.mail.internet.AddressException; @@ -24,9 +28,12 @@ public class DeliveryMethodMail extends AbstractDeliveryMethod { private static final Logger log = Logger.getLogger(DeliveryMethodMail.class); - private static DeliveryMethodMail instance; - private static final EmailValidator emailValidator = EmailValidator.getInstance(); + private static final long ERROR_SILENCE_TIMEOUT = 5000; + private static DeliveryMethodMail instance = null; + private final EmailValidator emailValidator = EmailValidator.getInstance(); + private final Map errors = new HashMap(); + private IUserManagementService userManagementService = null; public static DeliveryMethodMail getInstance() { @@ -49,7 +56,7 @@ return "Target user with ID " + toUserId + " was not found."; } String toEmail = toUser.getEmail(); - if (!DeliveryMethodMail.emailValidator.isValid(toEmail)) { + if (!emailValidator.isValid(toEmail)) { return "Target user's e-mail address is invalid."; } @@ -61,16 +68,17 @@ return "Source user with ID " + fromUserId + " was not found."; } String fromEmail = fromUser.getEmail(); - if (!DeliveryMethodMail.emailValidator.isValid(fromEmail)) { + if (!emailValidator.isValid(fromEmail)) { return "Source user's e-mail address is invalid."; } Emailer.send(subject, toEmail, "", fromEmail, "", message, isHtmlFormat); } return null; } catch (Exception e) { - DeliveryMethodMail.log.error("Error while sending an email: " + e.toString()); - return e.toString(); + String error = e.toString(); + logError(error); + return error; } } @@ -104,4 +112,29 @@ Emailer.sendFromSupportEmail(subject, adminEmail, body, isHtmlFormat); } } + + /** + * Checks if the error was already logged recently. If not, logs it. + */ + private synchronized void logError(String error) { + Iterator> errorIterator = errors.entrySet().iterator(); + boolean logError = true; + long currentTime = System.currentTimeMillis(); + // same errors younger than this will be silenced + long silencePeriod = currentTime - DeliveryMethodMail.ERROR_SILENCE_TIMEOUT; + while (errorIterator.hasNext()) { + Entry entry = errorIterator.next(); + if (entry.getKey() < silencePeriod) { + // clear the map from garbage + errorIterator.remove(); + } else if (error.equals(entry.getValue())) { + logError = false; + // do not break, let the clean up go through the whole map + } + } + if (logError) { + errors.put(currentTime, error); + DeliveryMethodMail.log.error("Error while sending emails: " + error); + } + } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java,v diff -u -r1.7.2.4 -r1.7.2.5 --- lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java 18 Feb 2016 13:16:27 -0000 1.7.2.4 +++ lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java 3 Mar 2016 12:24:17 -0000 1.7.2.5 @@ -202,7 +202,6 @@ for (Integer id : toUserIds) { String result = deliveryMethod.send(fromUserId, id, subject, message, isHtmlFormat); if (result != null) { - EventNotificationService.log.warn("Error occured while sending message: " + result); event = new Event(IEventNotificationService.SINGLE_MESSAGE_SCOPE, String.valueOf(System.currentTimeMillis()), null, subject, message, isHtmlFormat); subscribe(event, id, deliveryMethod, null);