我将如何做到这一点?
protected void Page_Load(object sender, EventArgs e)
{
try
{
doSomething();
}
catch (Exception ex)
{
// Here i would like to know that the page is "Problem.aspx"
// and that it was caused from the doSomething() function
}
}
private void doSomething()
{
logToSomething();
}
答案 0 :(得分:1)
异常对象具有stack trace属性,可以准确地告诉您错误发生的位置。
另外,请查看Microsoft Enterprise Library(更具体地说是Logging Block)。
记录的错误提供了堆栈跟踪,其中包括让您确切知道错误发生的位置。
答案 1 :(得分:0)
您可以通过解析异常消息来确定所有这些。
查看您的消息并使用正则表达式提取您需要的信息。
答案 2 :(得分:0)
我正在使用这个小类来记录错误,看一下我如何获取页面和函数(Stacktrace):
public static class ErrorLog
{
public static void WriteError(Exception ex)
{
try {
string path = "~/error/logs/" + System.DateTime.Now.ToString("dd-MM-yyyy") + ".txt";
if ((!System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))) {
System.IO.File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
}
using (System.IO.StreamWriter w = System.IO.File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path))) {
w.WriteLine(System.Environment.NewLine + "Log Entry : {0}", System.DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture));
var page = VirtualPathUtility.GetFileName(HttpContext.Current.Request.Url.AbsolutePath);
w.WriteLine("Error in: " + page);
string message = "Message: " + ex.Message;
w.WriteLine(message);
string stack = "StackTrace: " + ex.StackTrace;
w.WriteLine(stack);
w.WriteLine("__________________________");
w.Flush();
w.Close();
}
} catch (Exception writeLogException) {
try {
WriteError(writeLogException);
} catch (Exception innerEx) {
//ignore
}
}
}
}
这对我来说已经足够了。
注意:从VB.NET转换,因此未经测试
答案 3 :(得分:0)
您可能要查看的另一个选项是ELMAH(ASP.NET的错误记录模块和处理程序)http://code.google.com/p/elmah/。我想这实际上取决于你的具体需求。
答案 4 :(得分:0)
答案 5 :(得分:0)
无论你使用什么日志记录方法,都要做这样的事情。(手工输入可能无法编译)
try
{
DoignStuff();
}
catch( Exception ex)
{
Trace.WriteLine( "Exception in <Page Name> while calling DoingStuff() Ex:"+ ex.ToString() );
}
它将从页面名称&amp;方法(这是多余的,但让生活更轻松) 然后它将EX转换为一个字符串,显示调用堆栈和所有其他好东西,并将其放在日志文件中
注意:您必须在<Page Name>
。
Log4Net和Elmah也很棒,让生活更轻松。