不同页面上出现的ASP.net日志记录错误

本文关键字:net ASP 日志 记录 错误 | 更新日期: 2023-09-27 18:00:24

我该怎么做?

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

不同页面上出现的ASP.net日志记录错误

异常对象有一个堆栈跟踪属性,该属性告诉错误发生的确切位置。

此外,请查看Microsoft企业库(更具体地说是日志记录块)。

记录的错误提供了一个堆栈跟踪,让您确切地知道错误发生的位置。

我使用这个小类来记录错误,看看我是如何获得页面和函数(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转换而来,因此未经测试

您可以通过解析Exception消息来确定所有这些。

查看您的消息并使用正则表达式提取您需要的信息。

您可能想要研究的另一个选项是ELMAH(用于ASP.NET的错误记录模块和处理程序)http://code.google.com/p/elmah/。我想这真的取决于你的具体需求。

使用log4net记录错误消息。有关帮助,请参阅以下文章1和文章2。

无论使用什么日志记录方法,都要执行以下操作。(手写可能无法编译)

try
{
  DoignStuff();
}
catch( Exception ex)
{
Trace.WriteLine( "Exception in <Page Name>  while calling DoingStuff() Ex:"+ ex.ToString() );
}

它将以页面名称&方法(这是多余的,但使生活更轻松)然后它会将EX转换为一个字符串,显示调用堆栈和其他各种好东西,并将其放入日志文件中

注意:您必须在<Page Name>的位置键入页面名称。

Log4Net和Elmah也能让生活变得更轻松。