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

Sya*_*hya 3 c# logging

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

这是片段

 try
 {
  File.AppendAllText(fileName, appendString);
 }
 catch (System.Exception )
 {
 }
Run Code Online (Sandbox Code Playgroud)

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

Pie*_*kel 6

您需要同步日志写入.

会发生什么是两个线程同时附加到日志文件.

请尝试以下方法:

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

    // The rest of your Program class.
}
Run Code Online (Sandbox Code Playgroud)

然后,在写日志时:

lock (Program.LogWriteLock)
{
    File.AppendAllText(fileName, appendString);
}
Run Code Online (Sandbox Code Playgroud)

这样做的是以下内容.您创建一个object(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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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