I want to send only one email with all the errors I get from my C# Console Application.
I have the Targets:
<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}"       />     I have an Info rule and an Error rule:
<logger name="*" minlevel="Info" writeTo="HeelpAdsImport_log" />  <logger name="*" minlevel="Error" writeTo="HeelpAdsImport_patrick_email" />     I have several calls in the code for each other:
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); 
                You can use a BufferingWrapper for your email target to batch multiple log entries into one email. It supports batching for a specified span of time (set flushTimeout in milliseconds) and/or for a specified number of log entries (set bufferSize to the number of entries).
Edit: Wrap your current target inside a <target type="BufferingWrapper"> like so:
<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: Do you call LogManager.Flush() before exiting your program?
Edit 3: The ${newline} layout renderer should produce a line break in your email (at the end of the layout attribute above).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With