2010-10-14 120 views
0

我想在應用程序運行時將某些事件和例外寫入日誌文件。日誌文件大小限制爲N兆字節。當文件大小超過N兆字節時,我想從文件的開頭覆蓋。由於文件大小爲N兆字節,我不想複製到臨時文件,然後重命名它。C#寫入日誌文件

爲上述問題提供任何建議/方法。

+6

爲什麼重新發明車輪?有很多應用程序(如NLog)可以爲你做到這一點。 – RPM1984 2010-10-14 08:26:04

+1

你也有log4net,它是真正可定製的,如前所述,不要重複發明輪子:)(我認爲log4net會比你能做的任何事情都好,除非你花了12個月的時間,但你的老闆不會喜歡它)。 – 2010-10-14 08:27:34

+0

Windows還是Web?如果Web ** Elmah **岩石! http://code.google.com/p/elmah/ – balexandre 2010-10-14 08:43:14

回答

0

如果您的問題涉及寫入.svclog文件的.Net跟蹤偵聽器,則答案爲否:您無法將其配置爲在達到某個限制時從頭開始寫入。

但是,Microsoft有一個solution called Circular Tracing,您可以嘗試繞過無限制地增長日誌文件的問題。

2

嘗試Log4Not,或Microsoft

企業庫記錄組件
2

要麼使用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。

2

結賬log4net! 它非常靈活,並允許您在運行時更改日誌記錄的行爲(在何處登錄/如何記錄/記錄什麼內容)。

RollingFileAppender允許您定義達到給定大小限制時的行爲,它可能可以回答您的問題。

+1

我認爲[RollingFileAppender](http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.html)會做得更好工作;) – Oliver 2010-10-14 08:46:48

+0

@奧利弗:是的,你是對的!這現在已經糾正! – tsimbalar 2010-10-14 08:51:48

2
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的評論。

+1

如果你使用'new FileInfo(filename).Length',而不是讀取每個字節,那麼它會更壞。 – 2010-10-14 08:42:47

+0

事實上,我正在尋找類似FileInfo.GetSize或Fileinfo.Size的東西,並沒有發現任何東西。 文件大小的測試不是經常在我的文件中發生的事情。 順便說一句,另一種方法來改善上面的片段以使用StreamWriter上的Using語句 – vaitrafra 2010-10-14 09:00:18

1

作爲Log4Net的替代品,我可以推薦NLog 我們發現它在自己的簡單日誌類後更透明和易於使用。

0

爲什麼不試試微軟的企業日誌庫,它會比舊的FileIO操作或log4net提供更多的功能。

微軟已經發布了5.0版的企業庫,它可以幫助你編寫日誌並且用UI輕鬆配置它們,試試看。