Когда я начал перехватывать и отображать мои исключения из журналов в моем консольном приложении, я понял, что довольно много моих сообщений журнала отсутствуют из-за следующей ошибки
Процесс не может получить доступ к файлу '[MY_LOG_FILE_PATH]', поскольку он
используется другим процессом
Так я записываю свои сообщения в файл журнала (я создаю новый файл, который запускается при каждом запуске приложения). Переменные callingClass
и callingMethod
являются соответственно классом и методом, вызывающим функцию Log.
try
{
var stackTrace = new StackTrace();
string callingMethod = stackTrace.GetFrame(1).GetMethod().Name;
string callingClass = stackTrace.GetFrame(1).GetMethod().ReflectedType.Name;
string logText = string.Format(format, DateTime.Now, "INFO", callingClass, callingMethod, message);
if (!Directory.Exists("log"))
Directory.CreateDirectory("log");
if (!File.Exists(logFilePath))
File.Create(logFilePath);
using (FileStream f = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
using (StreamWriter sw = new StreamWriter(f))
sw.WriteLine(logText);
}
catch(IOException)
{
Console.WriteLine("Processes locking the file:");
var lockingProcesses = FileHelper.WhoIsLocking(logFilePath);
foreach (Process p in lockingProcesses)
Console.WriteLine("Process: " + p.ProcessName + " Machine:" + p.MachineName);
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("The following log could not be written to file: " + message);
Console.WriteLine("Error: " + ex.Message);
Console.ResetColor();
}
Когда я поймал IOException
, вызвавшего описанную выше ситуацию, я обнаружил, что процесс, в котором находится файл журнала, "dotnet" находится на компьютере "." , который я предполагаю, является текущей машиной.
Как мне не потерять сообщения журнала?
IDE : Visual Studio Community 2019 версия 16.0.4
.NET Framework Версия : 4.7.03190
ОС : Windows 10 Pro 64x