【发布时间】:2011-03-30 07:19:54
【问题描述】:
记录异常 下面的代码允许将异常的内容保存在文本文件中。在这里我只得到错误的描述。
但它并没有告诉我异常发生在哪里,发生在哪一行。 谁能告诉我如何才能做到这一点,以便我什至可以获取发生异常的行号?
#region WriteLogError
/// <summary>
/// Write an error Log in File
/// </summary>
/// <param name="errorMessage"></param>
public void WriteLogError(string errorMessage)
{
try
{
string path = "~/Error/" + DateTime.Today.ToString("dd-mm-yy") + ".txt";
if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
{
File.Create(System.Web.HttpContext.Current.Server.MapPath(path))
.Close();
}
using (StreamWriter w = File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path)))
{
w.WriteLine("\r\nLog Entry : ");
w.WriteLine("{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture));
string err = "Error in: " + System.Web.HttpContext.Current.Request.Url.ToString()
+ ". Error Message:" + errorMessage;
w.WriteLine(err);
w.WriteLine("__________________________");
w.Flush();
w.Close();
}
}
catch (Exception ex)
{
WriteLogError(ex.Message);
}
}
#endregion
【问题讨论】:
-
附带说明,此代码不是线程安全的,IIS 是多线程环境。
-
在你的 catch 块中递归调用 WriteLogError() 是一个非常糟糕的主意......
-
@jeroenh:无法使用更多相同的日志记录来报告日志记录期间的失败。一种替代方法是使用事件日志,这很痛苦但很有用。另一种是要么默默地忽略它,要么终止进程。