文件中的文字未附加 - C#

时间:2011-03-17 21:30:39

标签: c# logging .net streamwriter

我决定在我的应用程序中添加一个日志记录机制,这样我就可以捕获所引发的任何错误或异常。我注意到,当创建日志条目时,它不会添加到日志中,它似乎会覆盖文件中的所有内容,因此只有一个条目。

我感觉这很简单,我很遗憾,但我并不经常使用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

5 个答案:

答案 0 :(得分:4)

尝试使用this构造函数并为第二个参数传递true,以便以追加模式打开文件。

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

答案 1 :(得分:3)

只需使用StreamWriter的重载来获取bool以确定它是否应该追加。

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

答案 2 :(得分:2)

您正在使用的StreamWriter构造函数会覆盖该文件。有一个重载会附加:

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

It is all in the docs

此外,除非这是学习,否则请使用许多可用的日志框架之一。记录可能很难做到。

答案 3 :(得分:1)

之前已经花费了很多编程时间来解决这个问题。我建议使用日志软件包(例如log4net)来节省调试代码的时间,以便让您检测正在编写的代码。

答案 4 :(得分:1)

正如上面所说,当执行日志记录时,最好使用一个现成的日志记录框架,因为没有极大的努力,他们将能够比你更有效,更清洁地完成它。我在.NET中最喜欢的是使用预先打包的System.Diagnostics跟踪实用程序,它允许您在应用程序配置中声明一个tracelistener,然后在代码中写入它们,如下所示:

Trace.Write("Test output ");

或者,您可以使用log4Net框架。