2010-10-30 114 views
9

我剛剛開始玩Log4Net ...我現在想發送一封電子郵件,其中附有完整的日誌,或者直接在郵件中發送。使用SmtpAppender的問題在於它需要一個bufferSize,它將是未知的,因爲它應該發送郵件,無論它是否充滿錯誤或只是信息。Log4Net +完成後發送電子郵件?

更新:我的配置文件

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 

    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Backup Application - Log" /> 
    <smtpHost value="mailserver" /> 
    <authentication value="1" /> 
    <username value="userName" /> 
    <password value="mypw" /> 

    <port value ="25"/> 
    <lossy value="true" /> 
    <bufferSize value="500" /> 

    <evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="ALL"/> 
    </evaluator> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%timestamp [%thread] %-5level %logger – %message%newline" /> 
    </layout> 

</appender> 

回答

16

BUFFERSIZE等於必須被緩衝的日誌消息的數量(即,如果您設置爲512的郵件將被髮送一次,512條信息已被收集) 。

我認爲將其設置爲int.MaxValue(即2.147.483.647)是一個合理的選擇。對於一個系統來說,數十億條消息太多了,甚至長期運行。

如果你給了我10分鐘,我會確認你(從源代碼),如果你乾淨停止你的應用程序,迄今收集的所有日誌將被髮送

[更新]:證實! ! Destructor按預期沖刷隊列

[Add]我會刪除有損和評估者。你的問題很清楚:評估者優先於緩衝區:) :)

評估者用於在滿足特定條件時刷新隊列。您的情況等於true。當這個條件被觸發時,電子郵件被髮送,所以這就是爲什麼在每個日誌通話中發送郵件的原因。

這是略有不同只發送信息和錯誤消息,這是通過日誌過濾實現的。

刪除這兩個屬性,你的代碼將工作。設置int.MaxValue將允許您存儲可能的最大數量的消息。這是不太可能的(你最好像今晚有些人做的那樣贏得Superenalotto的178萬歐元大獎,或者被你頭上的彗星擊中),一個應用程序在跑步中收集了超過20億個錯誤/信息。

+0

我認爲這是問題..我不「清潔」停止我的應用程序(不知道如何?) – ebb 2010-10-30 23:54:05

+0

如果您的應用程序崩潰,您將受到信息丟失。這是一般日誌記錄中的一個非常常見的問題,因此,您應該總是避免**緩衝錯誤應用程序中的消息。順便說一句,「乾淨」停止是沒有未處理異常的停止。如果你試着去捕捉你的主要方法,那麼當你發現一個錯誤時,它將是一個乾淨的停止。 – 2010-10-30 23:59:24

+0

我正在使用try-catch。但問題是,我仍然希望通過郵件發送日誌,無論它是否充滿錯誤或只是信息。 – ebb 2010-10-31 00:01:50