SMTP-приложение Log4j для отправки всего одного письма за все ошибки

У меня есть программа, которая обрабатывает идентификаторы. Некоторые идентификаторы получают несколько ошибок в ETL. Я настраиваю log4j smtp для отправки электронного письма, когда я сталкиваюсь с ошибкой или неустранимым. Прямо сейчас он отправит 5 писем за пять ошибок за один запуск программы. Я хотел бы объединить их в одно письмо. У меня установлены свойства log4j вместо xml.

свойства. Я прятался от и до

log4j.rootCategory=DEBUG,stdout,fileout, sendMail

log4j.appender.sendMail=org.apache.log4j.net.SMTPAppender
log4j.appender.sendMail.Threshold=Error
log4j.appender.sendMail.SMTPHost=mailhost
log4j.appender.sendMail.From=hidden
log4j.appender.sendMail.To=hidden
log4j.appender.sendMail.Subject=Failure
log4j.appender.sendMail.BufferSize=1
#log4j.appender.sendMail.evaluatorClass=TriggerLogEvent
log4j.appender.sendMail.layout=org.apache.log4j.PatternLayout
log4j.appender.sendMail.layout.ConversionPattern=%m

Theres просто не так много информации о app4 log4j smtp.

1 ответ

Решение

Как насчет создания другого класса для агрегирования сообщений об ошибках и создания нового регистратора для этого класса

поэтому сначала вы создаете класс, который будет содержать все сообщения об ошибках для определенного идентификатора

public class TestLog4j {

static Logger log = Logger.getLogger(TestLog4j.class.getName());

int id;
ArrayList<String> errors,fatals;

public void addError(String e)
{

    this.errors.add(e);
}
public void addFatal(String f)
{

    this.fatals.add(f);
}

public void sendLogs() {

    SimpleDateFormat sdf = new SimpleDateFormat();

    for (String e : this.errors)
    {
         log.error("Error Message at "+sdf.format(new Date()) + " for id "+ this.id);
    }
    for (String f : this.fatals)
    {
          log.fatal("Fatal Message at "+sdf.format(new Date()) + " for id "+ this.id);
    }


    }

}

теперь вы вызываете свой метод sendLogs только после того, как убедитесь, что все сообщения будут агрегированы. также в ваших log4j.properties вы можете добавить еще один smtpappender для этого класса TestLog4j. очевидно, вы можете оптимизировать код

log4j.properties

log4j.logger.package.TestLog4j = ERROR, sendmail
# turn off additivity
log4j.additivity.package.TestLog4j = false
Другие вопросы по тегам