Log4j2: SMTPAppender no envía correos con error o nivel fatal

Reconocí algunos problemas con el SMTPAppender en log4j2. Cada vez que se registran eventos con el nivel.error ofatal son creadossin Tener un evento con el nivel.info Antes de que no se envíe ningún correo y el evento fatal desaparece.

Aquí está mi archivo de configuración log4j2 (log4j2.xml) y un pequeño programa (LogTest.java) para reproducir el 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>

Utilicé este pequeño programa para reproducir el 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();
    }

}

Si elimina las dos posiciones marcadas, todo funcionará como estaba previsto: se enviarán dos correos, cada uno con el evento fatal y el evento de información anterior. Además los 4 eventos se imprimen a la salida estándar:

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

Ahora, si solo activa / elimina la segunda posición, el segundo correo (fatal2) se envía según lo previsto (de nuevo con el evento info2 anterior), pero a pesar de que el primer evento fatal se imprime para la salida estándar, el correo se consume. La salida se ve como sigue:

test fatal 1
test info 2
test fatal 2

Personalmente, para mí, parece que tengo algo mal y log4j2 mal configurado o podría ser un error.

Gracias por su ayuda por adelantado.

* Jost

Nota:

Para las pruebas que utilicé.log4j2-beta7 Descargado desde la web del proyecto. La documentación se puede encontrar.aquí.

Respuestas a la pregunta(1)

Su respuesta a la pregunta