c# - 登录C#网站时出错

标签 c# asp.net .net logging error-handling

我打算实现错误日志记录,编写类似于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/

相关文章:

c# - TFS API - 如何独立于它们属于哪个构建定义来查询构建

c# - 如何从 List<IEnumerable<ItemClass>> 到 IEnumerable<ItemClass> 进行选择?

c# - 返回可为空的字符串类型

c# - 在 Entity Framework 中组合表达式而不是使用多个查询

c# - 通过用户输入扩展枚举

c# - 领域驱动设计-父子关系模式-规范模式

c# - 是否可以在不进行子类化的情况下扩展 DataGridView 控件?

asp.net - 找不到类型 'RestService.weddingservice',在 ServiceHost 指令中作为服务属性值提供

javascript - 使用 javascript 获取行数时出错

c# - 是否可以使用基于属性而不是类型的通用约束?