我想在應用程序運行時將某些事件和例外寫入日誌文件。日誌文件大小限制爲N兆字節。當文件大小超過N兆字節時,我想從文件的開頭覆蓋。由於文件大小爲N兆字節,我不想複製到臨時文件,然後重命名它。C#寫入日誌文件
爲上述問題提供任何建議/方法。
我想在應用程序運行時將某些事件和例外寫入日誌文件。日誌文件大小限制爲N兆字節。當文件大小超過N兆字節時,我想從文件的開頭覆蓋。由於文件大小爲N兆字節,我不想複製到臨時文件,然後重命名它。C#寫入日誌文件
爲上述問題提供任何建議/方法。
如果您的問題涉及寫入.svclog文件的.Net跟蹤偵聽器,則答案爲否:您無法將其配置爲在達到某個限制時從頭開始寫入。
但是,Microsoft有一個solution called Circular Tracing,您可以嘗試繞過無限制地增長日誌文件的問題。
嘗試Log4Not,或Microsoft
企業庫記錄組件要麼使用log4net的(http://logging.apache.org/log4net/index.html),在那裏你可以做到這一點
logger.Debug("Here is a debug log.");
logger.Info("... and an Info log.");
logger.Warn("... and a warning.");
logger.Error("... and an error.");
logger.Fatal("... and a fatal error.");
或者使用企業Libaries(http://msdn.microsoft.com/en-us/library/ff648951.aspx),在那裏你可以做到這一點
LogEntry entry = new LogEntry()
{
Message = "Hello Ent. Lib. Logging"
};
Logger.Write(entry);
兩者都可以配置爲指向一個文件通網/app.c onfig。
結賬log4net! 它非常靈活,並允許您在運行時更改日誌記錄的行爲(在何處登錄/如何記錄/記錄什麼內容)。
RollingFileAppender
允許您定義達到給定大小限制時的行爲,它可能可以回答您的問題。
float N = 1; //Log File size in MB
FileInfo logFile = new FileInfo("c:\\myLogFile.txt");
if (logFile.Length > 1024 * N)
{
logFile.Delete();
logFile.Create();
}
using (StreamWriter logStream = logFile.AppendText())
logStream.Write("String to write");
最簡單的方法,可能是最差的。 編輯以反映Hans Kesting的評論。
如果你使用'new FileInfo(filename).Length',而不是讀取每個字節,那麼它會更壞。 – 2010-10-14 08:42:47
事實上,我正在尋找類似FileInfo.GetSize或Fileinfo.Size的東西,並沒有發現任何東西。 文件大小的測試不是經常在我的文件中發生的事情。 順便說一句,另一種方法來改善上面的片段以使用StreamWriter上的Using語句 – vaitrafra 2010-10-14 09:00:18
作爲Log4Net的替代品,我可以推薦NLog 我們發現它在自己的簡單日誌類後更透明和易於使用。
爲什麼不試試微軟的企業日誌庫,它會比舊的FileIO操作或log4net提供更多的功能。
微軟已經發布了5.0版的企業庫,它可以幫助你編寫日誌並且用UI輕鬆配置它們,試試看。
爲什麼重新發明車輪?有很多應用程序(如NLog)可以爲你做到這一點。 – RPM1984 2010-10-14 08:26:04
你也有log4net,它是真正可定製的,如前所述,不要重複發明輪子:)(我認爲log4net會比你能做的任何事情都好,除非你花了12個月的時間,但你的老闆不會喜歡它)。 – 2010-10-14 08:27:34
Windows還是Web?如果Web ** Elmah **岩石! http://code.google.com/p/elmah/ – balexandre 2010-10-14 08:43:14