如何处理日志记录过程中的异常?

How to handle exceptions during logging?

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

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();
    }
}

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

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

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

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

此外,运行 在使用 TextWriter class 时出现异常的可能性非常小。您只需确保:

  1. 首先打开流时您的路径和权限是正确的/TextWriter
  2. 你的 TextWriter 对象不是 Disposed 过早地捕获 ObjectDisposedException 显式
  3. 在写
  4. 期间专门捕获IOException

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

无论如何,你可以按照@AnimalStyle 所说的去做,如果发生这种极不可能发生的事件。