通过向文件中添加日志记录来处理文件读写异常

本文关键字:记录 处理 文件读写 异常 日志 添加 文件 | 更新日期: 2023-09-27 18:01:31

我想在文件读(写)操作失败的情况下写一个日志记录,如:

try
{
    //some file operation, for example:
    TextReader tr2 = new StreamReader(nfilepath);
    resultN = tr2.ReadLine();
    tr2.Close();             
}
catch (Exception ex)
{
   string recfilepath = "...
   string rectoadd = "RecDateTime=" + DateTime.Now.ToString()+ ...+ex.Message.ToString();
   File.AppendAllText(recfilepath, rectoadd);
}

这样做正确吗?如果在上面的示例中,写入日志记录(File.AppendAllText(recfilepath, rectoadd);)的尝试也失败了怎么办?

通过向文件中添加日志记录来处理文件读写异常

永远不要捕捉异常类型——这样可以隐藏程序错误。只捕获预期的异常类型——在这种情况下,它可以是IOException。

在catch块中,您可以添加另一个try-catch块,并通过其他方式报告日志错误:跟踪,消息框等

假设失败是异常的,那么使用这样的异常是可以的。

如果您担心写入可能失败,那么将其封装在函数中。这里的Catch和failures并以其他方式记录这两条消息。只要你觉得有必要,你就可以重复这个。但是,在某些情况下,您必须接受系统已经损坏并且无法记录错误的事实。无论如何,您可能会从服务器升起的烟雾中知道这一点。

我认为人的承受能力是有限的。如果您达到了无法处理异常的程度,要么忽略它,要么让系统完全失败。

这对你来说真是一个糟糕的情况:-)有两件事你可以尝试:

  1. 把文件。AppendAllText (recfilepath rectoadd);在另一个try-catch块中,在catch块中,只需将异常写入日志控制台。
  2. 使用log4net或自己实现一个日志类,并确保日志编写者永远不会抛出异常。

File.AppendAllText - 9可能的例外(根据msdn,链接在这里)

另一方面,

EventLog (msdn link)允许您将异常写入Windows事件日志。和EventLog.WriteEntry只有3个可能的例外(EventLog。WriteEntry例外)。切换到EventLog.WriteEntry方法将减少可能的异常数量。但是…如果您仍然想尝试将异常记录到某个特定的文件中,请保留当前的逻辑。只需添加另一个try catch块,即

catch (Exception ex)
{
try
{
   string recfilepath = "...
   string rectoadd = "RecDateTime=" + DateTime.Now.ToString()+ ...+ex.Message.ToString();
   File.AppendAllText(recfilepath, rectoadd);
}
catch ()
{
// do Event logging
//also moving the string rectoadd declaration outside the try catch scope
// will give u ability to use it in this catch block to write it to the windows event log
}
}