Log4j2: SMTPAppender não envia mensagens com erro ou nível fatal

Eu reconheci alguns problemas com o SMTPAppender no log4j2. Sempre que registrar eventos com o nívelerror oufatal são criadossem tendo um evento com o nívelinfo antes que nenhum email seja enviado e o evento fatal desapareça.

Aqui está o meu arquivo de configuração log4j2 (log4j2.xml) e um pequeno programa (LogTest.java) para reproduzir o problema:

<?xml version="1.0" encoding="UTF-8"?>
    <configuration status="warn">

        <!-- mail server configuration -->
        <properties>
            <property name="receipients">[email protected]</property>
            <property name="from">[email protected]</property>
            <property name="smtpHost">smtp.example.com</property>
            <property name="smtpPort">25</property>
            <property name="smtpProtocol">smtp</property>
            <property name="smtpUser">me</property>
            <property name="smtpPassword">secret</property>
        </properties>

    <appenders>

        <!-- appender to write all info events to stdout -->
        <Console name="Console" target="SYSTEM_OUT">
            <ThresholdFilter level="info" onMatch="NEUTRAL" onMismatch="DENY"/>
        </Console>

        <!-- appender to send mails (default: error and fatal events)-->
        <SMTP name="Mailer" suppressExceptions="false"
              subject="Error log" to="${receipients}" from="${from}"
              smtpHost="${smtpHost}" smtpPort="${smtpPort}"
              smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}" 
              smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="2">
        </SMTP>
        <!-- appender to send mails asynchronously -->
        <Async name="AsyncMailer" > 
            <appender-ref ref="Mailer"/>
        </Async>

    </appenders>
    <loggers>

        <!-- logger to send mail on (at least) info level events -->
        <logger name="LogTest" level="info" additivity="true">
            <appender-ref ref="AsyncMailer"/>
        </logger>

        <!-- root logger to see what happens (info level and "above") -->
        <root level="info">
            <appender-ref ref="Console"/>
        </root>

    </loggers>
</configuration>

Eu usei este pequeno programa para reproduzir o problema (LogTest.java):

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

class LogTest
{
    private static Logger logger=LogManager.getLogger("LogTest");

    public void testlogger()
    {
        /* --> uncomment to enable first mail
        logger.info("test info 1");
        */
        logger.fatal("test fatal 1");

        /* --> uncomment to enable second mail
        logger.info("test info 2");
        */
        logger.fatal("test fatal 2");
    }

    public static void main(String[] args)
    {
        LogTest app=new LogTest();
        app.testlogger();
    }

}

Se você descomentar as duas posições marcadas, tudo funciona como planejado: dois e-mails são enviados - cada um contendo o evento fatal e o evento de informação anterior. Além disso, os 4 eventos são impressos no stdout:

test info 1
test fatal 1
test info 2
test fatal 2

Agora, se você apenas ativar / descomentar a segunda posição - o segundo e-mail (fatal2) é enviado como pretendido (novamente com o evento info2 anterior), mas mesmo que o primeiro evento fatal seja impresso para stdout, o e-mail é comido. A saída é a seguinte:

test fatal 1
test info 2
test fatal 2

Pessoalmente, para mim parece que eu tenho algo errado e mal configurado log4j2 ou pode ser um bug.

Obrigado pela sua ajuda antecipadamente.

* Jost

Nota:

Para os testes que useilog4j2-beta7 baixado do site do projeto. A documentação pode ser encontradaAqui.

questionAnswers(1)

yourAnswerToTheQuestion