将日志写入“lock for edit”文件,该文件抛出异常。如何解决这个问题?

时间:2010-11-08 19:25:28

标签: c# logging

我运行了多线程操作,每个操作都会向我的日志文件附加一些信息。问题是,有时日志文件被锁定以进行编辑,同时被其他线程访问,这会引发异常。如何确保正确写入日志?

这是片段

 try
 {
  File.AppendAllText(fileName, appendString);
 }
 catch (System.Exception )
 {
 }

现在,我只是忽略了这个例外。这导致一些日志没有被写入。

2 个答案:

答案 0 :(得分:6)

您需要同步日志写入。

会发生什么情况是两个线程同时附加到日志文件中。

尝试以下方法:

class Program
{
    public static readonly object LogWriteLock = new object();

    // The rest of your Program class.
}

然后,在写日志时:

lock (Program.LogWriteLock)
{
    File.AppendAllText(fileName, appendString);
}

这是做什么的以下内容。您创建一个对象(Program.LogWriteLock),用于“同步”您的日志操作。然后,当一个线程写入日志文件时,下一个线程将只是等待第一个线程完成,然后写入。

你甚至可以将它包装成一个漂亮的小助手类,你会得到这样的东西:

public static class LogHelper
{
    private static readonly object _syncRoot = new object();

    public static void AppendToLog(string appendString)
    {
        lock (_syncRoot)
        {
            File.AppendAllText("log.txt", appendString);
        }
    }
}

"log.txt"替换为您的实际日志文件位置。

答案 1 :(得分:0)

您是否尝试创建一个唯一目的是更新日志的线程,然后让其他线程添加到日志更新程序线程将处理的线程安全队列中?

这似乎比从所有其他线程写入文件更好。