如何在日志记录期间处理异常?

时间:2015-03-03 00:14:04

标签: c# exception logging exception-handling language-agnostic

我想在我的应用程序中添加一个简单的日志记录机制,以便记录应用程序运行期间发生的错误的详细信息。

private TextWriter m_TextWriter;
private List<string> m_LogEntries;   // buffered log messages

// ...

public void Write(string message)
{
    m_LogEntries.Add(message);

    if (m_LogEntries.Count >= m_LogEntriesLimit)
    {
        Flush();
    }
}

private void Flush()
{
    try
    {
        foreach (var message in m_LogEntries)
        {
            m_TextWriter.WriteLine(message);
        }
        m_TextWriter.Flush();
    }
    catch
    {
        // How to deal with exceptions?
    }
    finally
    {
        m_LogEntries.Clear();
    }
}

日志数据写在文本文件中,因此在每次写入操作期间可能会发生一些异常。处理对记录器方法调用期间发生的异常的正确方法是什么?我应该抓住并忽略它们吗?

换句话说,记录器通常用于记录在执行应用程序期间发生的异常的详细信息。但是如何处理在写日志消息期间可能发生的异常?

2 个答案:

答案 0 :(得分:1)

我建议将这些类型的错误写入Windows事件日志。

答案 1 :(得分:1)

最好使用像Log4Net这样的日志框架。

此外,使用TextWriter类时遇到异常的可能性非常小。你必须确保:

  1. 首先打开流/ TextWriter时,您的路径和权限是正确的。
  2. 除了明确捕获TextWriter之外,您的Disposed对象不会ObjectDisposedException过早
  3. 在写
  4. 期间特别捕捉IOException

    您可能需要try-catch才能100%确定没有发生任何不良事件(例如,当外部进程干扰您的日志记录文件路径时)。如果失败,请考虑在经过多次最大尝试后添加带有退避机制的重试。

    无论如何,你可能就像@AnimalStyle所说的那样,如果发生这种情况的那么非常不可能发生。