0

该错误是随机发生的,我的猜测是当交通繁忙时,但我很难复制它。每次启动业务事务时都会运行此功能。

错误:System.IO.IOException:进程无法访问文件'',因为它正被另一个进程使用。在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径)

private void writeToTrafficLogFile(string data, string filePath)
    {
        try
        {
            StreamWriter logWriter;

            if (!File.Exists(filePath))
            {
                logWriter = new StreamWriter(filePath);
            }
            else
            {
                logWriter = File.AppendText(filePath);
            }

            logWriter.WriteLine(DateTime.Now);
            logWriter.WriteLine(data);
            logWriter.WriteLine();

            logWriter.Close();

        }
        catch (Exception error) {
            sendLoggingErrorEmail(error, "Error Writing writeToTrafficLogFile", "Error Writing writeToTrafficLogFile.\r\n");
        }
    }

    #endregion
}
4

2 回答 2

3

切换到现有的、经过良好测试的日志记录解决方案可能更容易、更安全。有几个存在,看看列出了几十个的dotnetlogging.com。我不能推荐任何东西,现在我被 log4net 困住了,但我不能推荐它。

于 2013-06-25T23:15:09.750 回答
0

您可能同时从多个线程调用它...

有两种可能的解决方案:

A:创建一个线程,从其他线程可以写入的字符串写入日志文件。- 澄清编辑:有一个代码类

public static List<string> logme = new List<string>();
// Launch LogLoop as a thread!
public static void logloop()
{
     while (true)
     {
          while (logme.Count > 0)
          {
              File.AppendAllText("log.txt", logme[0] + "\r\n");
              logme.RemoveAt(0);
          }
          Thread.Sleep(500);
     }
}
// Oh, and whenever you want to log something, just do:
logme.add("Log this text!");

B:在日志写入器上使用锁。

于 2013-06-25T23:12:30.637 回答