如何处理日志记录过程中的异常?
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 时出现异常的可能性非常小。您只需确保:
- 首先打开流时您的路径和权限是正确的/
TextWriter
。
- 你的
TextWriter
对象不是 Disposed
过早地捕获 ObjectDisposedException
显式
- 在写
期间专门捕获IOException
您可能需要 try-catch
才能 100% 确定不会发生任何不良事件(例如,当外部进程干扰您的日志文件路径时)。如果失败,请考虑在最大尝试次数后添加具有退避机制的重试。
无论如何,你可以按照@AnimalStyle 所说的去做,如果发生这种极不可能发生的事件。
我想在我的应用程序中添加一个简单的日志记录机制,以便记录应用程序运行期间发生的错误的详细信息。
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 时出现异常的可能性非常小。您只需确保:
- 首先打开流时您的路径和权限是正确的/
TextWriter
。 - 你的
TextWriter
对象不是Disposed
过早地捕获ObjectDisposedException
显式 - 在写 期间专门捕获
IOException
您可能需要 try-catch
才能 100% 确定不会发生任何不良事件(例如,当外部进程干扰您的日志文件路径时)。如果失败,请考虑在最大尝试次数后添加具有退避机制的重试。
无论如何,你可以按照@AnimalStyle 所说的去做,如果发生这种极不可能发生的事件。