我运行了多线程操作,每个操作都会向我的日志文件附加一些信息。问题是,有时日志文件被锁定以进行编辑,同时被其他线程访问,这会引发异常。如何确保正确写入日志?
这是片段
try
{
File.AppendAllText(fileName, appendString);
}
catch (System.Exception )
{
}
现在,我只是忽略了这个例外。这导致一些日志没有被写入。
答案 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)
您是否尝试创建一个唯一目的是更新日志的线程,然后让其他线程添加到日志更新程序线程将处理的线程安全队列中?
这似乎比从所有其他线程写入文件更好。