2017-02-08 38 views
2

問候用戶#1,log4net的SmtpAppender把門檻在主題行

我使用log4net的時候有錯誤,將發送電子郵件C#的窗口服務。我們現在遇到了收到「預期」和「正常」錯誤電子郵件的問題,這是出錯的地方,但服務仍然有效,沒有任何事情可以做。因此,一個簡單的解決方案是識別我們的「預期」錯誤並將它們記錄爲「WARN」而不是錯誤。

如果log4net可以爲我們的「警告」級別和「錯誤」級別的事件發送電子郵件,並在主題行中確定級別是什麼,那將會很棒。因此,「警告」級別可以自動發送到某個文件夾以便在將來某個時間查看,並且可以直接識別和查看「錯誤」。

問題:是否可以在主題行中獲取觸發值,即「WARN」或「ERROR」?

我試圖在配置文件中創建兩個SmtpAppender塊,但這不起作用。

感謝您的幫助。

回答

3

您可以創建兩個單獨的追加程序和設置爲每一個LevelRangeFilter,像這樣:

<appender name="WarnSmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="WARN" /> 
     <levelMax value="WARN" /> 
    </filter> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Warning logging message" /> 
    <smtpHost value="SMTPServer.domain.com" /> 
    <bufferSize value="512" /> 
    <lossy value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> 
    </layout> 
</appender> 

<appender name="ErrSmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="ERROR" /> 
     <levelMax value="ERROR" /> 
    </filter> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Error logging message" /> 
    <smtpHost value="SMTPServer.domain.com" /> 
    <bufferSize value="512" /> 
    <lossy value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> 
    </layout> 
</appender> 

然後,您設置您的記錄器與兩個附加目的地:

<root> 
    <!-- Log4Net available levels: 
     ALL DEBUG INFO WARN ERROR FATAL OFF--> 
    <level value="WARN" /> 
    <appender-ref ref="WarnSmtpAppender" /> 
    <appender-ref ref="ErrSmtpAppender" /> 
</root> 

請注意,記錄器級別必須設置爲WARN或更低。如果設置爲ERROR,記錄器將不會發出警告,所以警告appender不會得到它們。

這應該可以做到。