Log4j SmtpAppender - исключение в тему - PullRequest
4 голосов
/ 30 января 2012

Я использую log4j для отправки писем за исключением.

Моя конфигурация log4j:

log4j.rootLogger=info, stdout, errmail

log4j.appender.errmail=cz.toby.utils.log.ErrSmtpAppender
log4j.appender.errmail.to=my_email@email.cz
log4j.appender.errmail.subject=Error - 
log4j.appender.errmail.layout=org.apache.log4j.HTMLLayout
log4j.appender.errmail.threshold=debug

Работает отлично, но я хочу динамически изменять содержимое темы с именами исключений.

мой appender выглядит так:

    public class ErrSmtpAppender extends SMTPAppender {

    @Override
    public void activateOptions() {
        setSMTPHost("xxxxx");
        setFrom("from_email@email.cz");
        setBufferSize(50);
        super.activateOptions();
        try {
            msg.setSubject(msg.getSubject() + ", node: " + InetAddress.getLocalHost().getHostName());
        } catch (Exception e) {
            // do nothing, only cannot set host to subject
        }
    }

}

Как программно установить тему с именем исключения? Я пытался найти его в интернете, но нашел только похожие темы, но не то, что мне точно нужно.

1 Ответ

2 голосов
/ 31 января 2012

@ Тоби: Хорошо, я неправильно понял, чего вы пытаетесь достичь. Вы хотите сообщение журнала в теме электронной почты?

Я думаю, для этого вам понадобится получить доступ к CyclicBuffer cb в Appender, например:

msg.setSubject("Logged Message String" + cb.get(cb.length()).getMessage());

Или вам также может понадобиться ObjectRenderer

ThreadGroupRenderer stackTraceRenderer = new ThreadGroupRenderer();
msg.setSubject("First 100 Chars of Stack Trace: " + stackTraceRenderer(cb.get(cb.length()-1).getMessage()).substring(0,99));
...