Подтвердить что ты не робот

Загружайте только одно электронное письмо со всеми ошибками, используя NLog with Console Application, используя С#

Я хочу отправить только одно электронное письмо со всеми ошибками, которые я получаю от своего консольного приложения С#.

У меня есть Цели:

<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}"
      />

У меня есть правило Info и правило ошибки:

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

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

У меня есть несколько вызовов в коде друг для друга:

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);
4b9b3361

Ответ 1

Вы можете использовать BufferingWrapper для своей целевой адреса электронной почты, чтобы выполнять несколько записей журнала в одном электронном письме. Он поддерживает пакетную обработку в течение определенного промежутка времени (установите flushTimeout в миллисекундах) и/или для указанного количества записей журнала (установите bufferSize на количество записей).

Изменить: Оберните свою текущую цель внутри <target type="BufferingWrapper"> следующим образом:

<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>

Изменить 2: Вы вызываете LogManager.Flush() перед выходом из вашей программы?

Изменить 3: Средство рендеринга макета ${newline} должно привести к разрыву строки в вашей электронной почте (в конце layout выше).