错误随机发生,我的猜测是当交通拥挤时,但我很难复制它。每次启动业务事务时都会运行此功能。
错误:System.IO.IOException:进程无法访问文件'' 因为它正被另一个进程使用。在 System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)
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
}
答案 0 :(得分:3)
切换到现有的,经过良好测试的日志记录解决方案可能更容易,更灵活。有几个存在,看看dotnetlogging.com列出了数十个。我不能推荐任何,现在我被log4net卡住但我不推荐它。
答案 1 :(得分:0)
你可能同时从多个线程中调用它......
有两种可能的解决方案:
答:创建一个线程,从其他线程可以写入的字符串写入日志文件。 - 澄清编辑:有一个类似
的类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:在日志编写器上使用Lock。