我們使用log4net作爲我們當前的應用程序日誌記錄,但我不喜歡我們當前的日誌框架圍繞它構建的方式。例如,它目前有一個單點故障,如果由於某種原因它不能連接到日誌服務器,那麼你就沒有日誌記錄。我想將它構建爲一個靈活而簡單的框架,它允許我指定一個或多個「備份」appender,以便在主服務器失敗的情況下使用它(例如,如果日誌服務器關閉,寫入文件代替)。.NET日誌記錄框架設計
你們有沒有偶然發現過你喜歡的東西,發現寫得很好?我不介意我自己的滾動,但我儘量不推倒重來
感謝
我們使用log4net作爲我們當前的應用程序日誌記錄,但我不喜歡我們當前的日誌框架圍繞它構建的方式。例如,它目前有一個單點故障,如果由於某種原因它不能連接到日誌服務器,那麼你就沒有日誌記錄。我想將它構建爲一個靈活而簡單的框架,它允許我指定一個或多個「備份」appender,以便在主服務器失敗的情況下使用它(例如,如果日誌服務器關閉,寫入文件代替)。.NET日誌記錄框架設計
你們有沒有偶然發現過你喜歡的東西,發現寫得很好?我不介意我自己的滾動,但我儘量不推倒重來
感謝
沒有已經建成,我所遇到的任何一個大風扇。我建議你製作自己的appender,使用現有的appender,但在失敗發生時在該屬性中添加了該做什麼。你可以使用AppenderSkeleton作爲新的appender的基類,然後從那裏調用你想使用的appender的附加函數。
所以當LOG4使用您的記錄它會是這樣的(注意:這是不完整的,但應該給你一個起點):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net.Appender;
using log4net.Core;
namespace logger {
class FailoverAppender : AppenderSkeleton {
protected override void Append(LoggingEvent loggingEvent) {
// Send the log message to the web service.
try {
FirstAppender.Append(loggingEvent);
}
catch (Exception e) {
try{
SecondAppender.Append(loggingEvent);
}
catch (Exception e2){
ErrorHandler.Error("An error occurred while connecting to the logging service.", e);
}
}
}
}
}
我希望這可以幫助你上手,也許如果你完成後你可以在這裏發佈解決方案。
感謝凱文,這是一個不錯的方法......我其實寫了一些類似於log4j的東西但這可能是5-6年前,不幸的是我找不到該死的代碼。如果我找到了一些東西,或者只是從頭開始寫,歡呼,我一定會回到這裏 – snappymcsnap 2012-04-05 21:15:26
我實際上決定使用NLog來取代它,因爲log4net對於設置來說非常痛苦。 NLOG更容易使用,更容易設置和代碼庫保持最新(log4net的是幾乎放棄)
NLog允許指定多個日誌目標。 log4net不允許嗎? – 2012-04-05 19:22:55
我認爲OP想要的是有多個日誌目標,但只有在主要目標不可用時才使用替代日誌目標。 – aKzenT 2012-04-05 19:35:13
可能的重複:http://stackoverflow.com/questions/3244623/how-to-configure-log4net-for-fallback – aKzenT 2012-04-05 19:36:03