ASP.net记录在不同页面上发生的错误

时间:2011-06-27 11:41:30

标签: c# asp.net exception logging

我将如何做到这一点?

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();
    }

6 个答案:

答案 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)

使用log4net记录错误消息。如需帮助,请查看这些article 1article 2

答案 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也很棒,让生活更轻松。