使用Lock In Catch for Exception来写入物理日志文件

时间:2012-09-24 21:42:23

标签: c# asp.net exception file-io thread-safety

我的团队正在开发一个C#ASP.NET Web应用程序。 我决定通过写入错误日志文件来处理错误。

我编写的log.Error方法将记录到错误目录中的物理日志文件。

我认为在执行log.Error方法时使用锁来控制线程是合适的,因为我想在每次发生时记录错误。

因此,这是我的大多数异常处理的格式:

protected void blahblahCsharpMethodBlahBlah()
{
try
{
    blah blah C# code blah blah
}
catch(Exception ex  ){
    lock (_objectblahblahCsharpMethodBlahBlah)
    {
        // The following log.Error method that I wrote would log to a physical log file in an error directory.
        log.Error(ex.ToString(),
                  PerlsPivotErrorDirectory,
                  System.Reflection.MethodBase.GetCurrentMethod().Name,
                  this.GetType().Name,    System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location));
}
}
} // protected void blahblahCsharpMethodBlahBlah()

使用锁来控制线程是否正确,以便它们以正确的序列化方式执行log.Error方法?

1 个答案:

答案 0 :(得分:4)

如果要确保线程安全,则需要使用锁。但为了使它更简单,更防弹,我会锁定Error方法。通常,您在应用程序的不同类之间共享相同的日志对象(或至少相同的日志文件),因此直接登录日志(此处为错误)函数更有意义。

但你不想或不需要重新发明轮子。使用默认为线程安全的NLog