2

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

我有一种感觉,我错过了一些简单的东西,但我并不经常使用 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;
        }

日志本身:

日志文件

4

5 回答 5

4

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

...
using(writer = new StreamWriter(_workingDirectory, true))
...
于 2011-03-17T21:33:04.430 回答
3

只需使用 StreamWriter 的重载,它需要一个 bool 来确定它是否应该附加。

using (var writer = new StreamWriter(_workingDirectory, true)
{
    ...
}
于 2011-03-17T21:34:40.227 回答
2

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

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

这一切都在文档中

此外,除非这是为了学习,否则请改用许多可用的日志记录框架之一。日志记录可能很难正确。

于 2011-03-17T21:34:48.040 回答
1

之前已经花费了很多编程时间来解决这个问题。我建议使用 log4net 之类的日志记录包来节省您调试代码的时间,这些代码旨在让您检测正在编写的代码。

于 2011-03-17T21:36:00.363 回答
1

正如 driis 上面所说的,在执行日志记录时,最好使用现成的日志记录框架之一,因为无需付出极大的努力,他们就能比您更高效、更清洁地完成它。我在 .NET 中最喜欢的是使用预打包的System.Diagnostics跟踪实用程序,它允许您在应用程序配置中声明一个跟踪侦听器,然后只需在您的代码中写入它们,如下所示:

Trace.Write("Test output ");

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

于 2011-03-17T21:48:22.100 回答