通过向文件中添加日志记录来处理文件读写异常
本文关键字:记录 处理 文件读写 异常 日志 添加 文件 | 更新日期: 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并以其他方式记录这两条消息。只要你觉得有必要,你就可以重复这个。但是,在某些情况下,您必须接受系统已经损坏并且无法记录错误的事实。无论如何,您可能会从服务器升起的烟雾中知道这一点。
我认为人的承受能力是有限的。如果您达到了无法处理异常的程度,要么忽略它,要么让系统完全失败。
这对你来说真是一个糟糕的情况:-)有两件事你可以尝试:
- 把文件。AppendAllText (recfilepath rectoadd);在另一个try-catch块中,在catch块中,只需将异常写入日志控制台。 使用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
}
}