您好我想将我的userdefined异常写入日志文件。 因此,我想将该消息记录到txt文件中,而不是抛出异常。
我的异常的构造函数如下所示:
public OpenFileException(string pathToOpen, Exception innerexception)
: base("Couldn't find the path: " + pathToOpen, innerexception)
{
this.pathToOpen = pathToOpen;
}
这就是我现在记录异常的方式:
try
{
string data = Read(txtLocation.Text);
txtInfo.Text = data;
}
catch (Exception ex)
{
WriteLog("[" + DateTime.Now + "]" + " " + ex.Message);
MessageBox.Show(" ");
throw new OpenFileException(txtLocation.Text, ex);
}
所以我要问的是。如何将我的字符串“找不到路径:”记录到txt文件中?
答案 0 :(得分:0)
看起来有点过分,为什么不使用Log4Net并让它根据app.config中的配置写文件或发送电子邮件?
基本上你可以毫不费力地获得所有你想要的东西,然后你可以专注于最重要的事情。
即使您决定保留当前逻辑,我仍然会创建一个Logger类来执行所有操作,而不必在应用程序的每个catch块中指定DateTime.Now和其他魔法。
答案 1 :(得分:0)
你可以使用,而不是重新发明轮子,log4net http://logging.apache.org/log4net/或NLog http://nlog-project.org/wiki/Documentation都值得学习和使用,即使在简单的应用程序中也是如此。
答案 2 :(得分:0)
我通常会在正常的try / catch
之外捕获并记录用户定义的异常try {
try {
string data = Read(txtLocation.Text);
txtInfo.Text = data;
} catch (Exception ex) {
throw new OpenFileException(txtLocation.Text, ex);
}
....
} catch(OpenFileException ex) {
WriteLog("[" + DateTime.Now + "]" + " " + ex.Message);
MessageBox.Show(" ");
} catch(Exception ex) {
WriteLog("[" + DateTime.Now + "]" + " " + ex.Message);
MessageBox.Show(" ");
}
您正在创建用户定义的异常,以便您可以区别对待
答案 3 :(得分:0)
您需要找到一种方法来在找不到文件时抛出异常。
我认为这不是一个好主意,因为当找不到文件时,.NET已经抛出FileNotFoundException
。你应该抓住它并以这种方式记录消息。
try
{
string data = Read(txtLocation.Text);
txtInfo.Text = data;
}
catch (FileNotFoundException ex)
{
string log = String.Format("[{0}] Couldn't find the path: {1}"
, DateTime.Now
, ex.FileName);
WriteLog(log);
}
当一个已经存在时,不要创建新的异常类型。
(原谅格式化中的特质)
答案 4 :(得分:0)
来自框架设计指南:
当您的异常提供额外属性时,请覆盖ToString。
然后你可以只调用log.Error(exception)
,它就会按照你ToString()
编写的方式记录而不需要额外的操作。