我有一个简单的静态日志类,但它绝对不是线程安全的,因为每个调用都试图写入同一个文件。我会得到这些异常:
The process cannot access the file 'logfile.txt' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
...
什么是最好的使其线程安全的方法?
public static class Logger
{
private static readonly string LOG_FILENAME = "logfile.txt";
private static readonly string LOG_FOLDER = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "App name");
private static readonly string LOG_FULLPATH = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "App name", LOG_FILENAME);
public static void LogMessageToFile(string msg)
{
msg = string.Format("{0:G}: {1}{2}", DateTime.Now, msg, Environment.NewLine);
File.AppendAllText(LOG_FULLPATH, msg);
}
}
作为一个日志功能,我希望能够从代码的许多不同部分访问它(因此,我选择将其设置为静态)。然而,我想要使它线程安全,我需要始终传递一个公共对象来进行锁定(lock()),这样做似乎违背了静态函数的目的。或者这并不是这种情况吗?