2011-03-17 43 views
2

我決定到記錄機制添加到我的應用程序,這樣我可以趕上拋出任何錯誤或異常。我注意到,當創建日誌條目時,它不會添加到日誌中,它似乎會覆蓋文件中的所有內容,因此只會有一個條目。文本不附加 - C#

我有一種感覺,這是一些簡單的我失蹤,但我真的不使用System.IO命名空間非常頻繁。

創建/檢查日誌文件:

public static void SetWorkingDirectory(string path) 
     { 
      _workingDirectory = path + "\\ErrorLog.txt"; 

      if(!File.Exists(_workingDirectory)) 
      { 
       File.Create(_workingDirectory); 
      } 
      pathSet = true; 
     } 

添加到日誌:

public static bool Add(string message) 
     { 
      StringBuilder str = new StringBuilder(); 
      str.Append(System.DateTime.Now); 
      str.Append(" "); 
      str.Append(message); 
      str.Append(" \n"); 

      using (StreamWriter writer = new StreamWriter(_workingDirectory)) 
      { 
       writer.Write(str.ToString()); 
      } 
      return true; 
     } 

日誌本身:

Log file

回答

4

嘗試使用this構造函數併爲第二個參數傳遞true,以便以append模式打開文件。

... 
using(writer = new StreamWriter(_workingDirectory, true)) 
... 
+0

哈哈,這是我想檢查的最後一件事= /我認爲有一個「\ n」會導致其寫入到一個新的生產線,但我想這只是作爲控制檯。謝謝! – 2011-03-17 21:35:36

+1

你的假設是部分正確的。問題在於,每次打開文件時只寫一行,每次打開文件時都覆蓋舊文件而不是附加到文件末尾。 – 2011-03-17 22:36:38

+0

啊,我明白了,謝謝澄清。 – 2011-03-18 13:42:02

3

只需使用StreamWriter的重載,該重載需要一個bool來確定它是否應該追加。

using (var writer = new StreamWriter(_workingDirectory, true) 
{ 
    ... 
} 
2

StreamWriter你正在使用的構造函數覆蓋文件。有一個過載會附加:

using (StreamWriter writer = new StreamWriter(_workingDirectory, true)) 

It is all in the docs

而且,除非這對學習,使用許多可用的日誌框架的一個替代。記錄可能很難正確。

1

許多編程時間都花了之前解決這個問題。我建議使用諸如log4net之類的日誌包來節省時間調試代碼,這些代碼旨在讓您檢測正在編寫的代碼。

+1

有效的意見,但這不是一個真正的答案這個問題,而是如何評論呢? – SpaceghostAli 2011-03-17 21:49:39

+0

與「解決眼前的問題」答案相比,我的回答可能更適合未來的編程考慮。 – DaveRead 2011-03-17 21:52:59

1

正如driis已如上所述,執行記錄其最好使用現成的日誌框架之一,因爲沒有精力一個極端的量時,他們將能夠更有效和更清潔的比你會做。我在.NET中最喜歡的是使用預包裝System.Diagnostics跟蹤實用程序,讓你可以在你的應用程序配置聲明TraceListener的(一個或多個),然後簡單地給他們寫在你的代碼是這樣的:

Trace.Write("Test output "); 

另外,您可以使用log4Net框架。

+0

謝謝肖恩,我會研究它:) – 2011-03-17 21:55:03