Solo envíe un correo electrónico con todos los errores usando NLog con la aplicación de consola usando C#


Quiero enviar solo un correo electrónico con todos los errores que recibo de mi aplicación de consola de C#.

Tengo los Objetivos:

<target xsi:type="File" name="HeelpAdsImport_log" fileName="${basedir}/logs/HeelpAdsImport-${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}" />

<target name="HeelpAdsImport_patrick_email" xsi:type="Mail"
        smtpServer="XXXXX"
        smtpPort="25"
        smtpAuthentication="Basic"
        smtpUserName="YYYYYY"
        smtpPassword="*ZZZZZZ"
        enableSsl="false"
        from="DDDDDDDDDD"
        to="EEEEEEEEEEE"
        layout="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}"
      />

Tengo una regla de Información y una regla de Error:

<logger name="*" minlevel="Info" writeTo="HeelpAdsImport_log" />

<logger name="*" minlevel="Error" writeTo="HeelpAdsImport_patrick_email" />

Tengo varias llamadas en el código el uno para el otro:

logger.Log(LogLevel.Info, " ----- New Ad Success! - auto.id: " + auto.id + " | auto.plate: " + auto.plate);

logger.Log(LogLevel.Error, "| continue error #4 - auto.id: " + auto.id);
 23
Author: Patrick, 2014-03-27

1 answers

Puede usar un BufferingWrapper para su destino de correo electrónico para agrupar varias entradas de registro en un correo electrónico. Admite el procesamiento por lotes durante un lapso de tiempo especificado (establecer flushTimeout en milisegundos) y/o para un número especificado de entradas de registro (establecer bufferSize al número de entradas).

Editar: Envuelva su destino actual dentro de un <target type="BufferingWrapper"> de la siguiente manera:

<target xsi:type="BufferingWrapper"
          name="MailBuffer"
          slidingTimeout="false"
          bufferSize="100"
          flushTimeout="-1">
    <target name="HeelpAdsImport_patrick_email" xsi:type="Mail"
            smtpServer="XXXXX"
            smtpPort="25"
            smtpAuthentication="Basic"
            smtpUserName="YYYYYY"
            smtpPassword="*ZZZZZZ"
            enableSsl="false"
            from="DDDDDDDDDD"
            to="EEEEEEEEEEE"
            layout="${longdate} ${uppercase:${level}} ${callsite:className=true:includeSourcePath=true:methodName=true} ${message}${newline}"
          />
</target>

Edit 2: ¿Llamas a LogManager?Flush () antes de salir del programa?

Editar 3: El {{newline} el renderizador de diseño debe producir un salto de línea en su correo electrónico (al final del atributo layout anterior).

 35
Author: andyp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-31 19:04:25