我打算实现错误日志记录,编写类似于this的内容:
public static void WriteError(string errorMessage)
{
try
{
string path = "~/Error/" + DateTime.Today.ToString("dd-mm-yy") + ".txt";
if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
{
File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
}
using (StreamWriter w = File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path)))
{
w.WriteLine("\r\nLog Entry : ");
w.WriteLine("{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture));
string err = "Error in: " + System.Web.HttpContext.Current.Request.Url.ToString() +
". Error Message:" + errorMessage;
w.WriteLine(err);
w.WriteLine("__________________________");
w.Flush();
w.Close();
}
}
catch (Exception ex)
{
WriteError(ex.Message);
}
}
我的问题是:由于这是一个网站,因此我将同时拥有多个用户。在这种情况下,如果多个用户同时遇到异常并尝试写入同一文件,它将再次给我异常吗?在这种情况下,如何为同时进行的用户正确实现错误日志记录?还是行得通?
提前致谢。
最佳答案
除了使用NLog或其他日志库之外,锁定这种情况的方法是使用互斥锁。我建议使用mutex
,而不是lock()
,因为它可以捕获可能引发错误的所有池/线程。
在MSDN上,有关于mutex
和示例的详细信息:
http://msdn.microsoft.com/en-us/library/system.threading.mutex.aspx
一个简单的例子
public static void WriteError(string errorMessage)
{
var mut = new Mutex(true, "LogMutexName");
try
{
// Wait until it is safe to enter.
mut.WaitOne();
// here you open write close your file
}
finally
{
// Release the Mutex.
mut.ReleaseMutex();
}
}
关于c# - 登录C#网站时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546447/