2014-03-27 53 views
21

控制檯應用程序我想所有我從我的C#控制檯應用程序得到錯誤只發送一個電子郵件的所有錯誤。僅發送一個電子郵件使用NLOG使用C#

我的目標:

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

我有一個信息規則和錯誤規則:

<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); 
+0

所以...什麼是與電子郵件的問題? –

+0

嗨,我每次收到電子郵件都會收到一封電子郵件logger.Log(LogLevel.Error ...並且我在過程中多次撥打電話,但我只想在過程結束時收到一封電子郵件 – Patrick

回答

32

您可以使用您的電子郵件的目標一個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屬性的上方結束)。

+0

嗨,謝謝,但在哪裏設置我的代碼中的「BufferingWrapper」和「wrappedTargetType」先緩衝並最終發送? – Patrick

+1

@Patrick請參閱編輯 –

+0

嗨,似乎沒有達到bufferSize中設置的條目數量時,電子郵件最後沒有發出 – Patrick