包括完整的跟踪与堆栈跟踪/错误输出c#

本文关键字:跟踪 错误 输出 包括完 堆栈 | 更新日期: 2023-09-27 18:08:13

我在global.asax文件中使用以下代码:

void Application_Error(object sender, EventArgs e)
{
    // Code that runs when an unhandled error occurs
    Exception objErr = Server.GetLastError().GetBaseException();
    string err = "Error Caught in Application_Error event<hr />" + "Current User: " + HttpContext.Current.User.Identity.Name + "<hr />" +
            "Error in: " + Request.Url.ToString() +
            "<hr />Error Message:" + objErr.Message.ToString() +
            "<hr />Stack Trace:" + objErr.StackTrace.ToString();
    //EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error);
    doEmail.sendEmail("Application Error - Curato (" + System.Configuration.ConfigurationManager.AppSettings["OrganisationName"].ToString() + ")", err);
    // We do not want the error handled by the web.config as well, so clear the error.
    Server.ClearError();
    // Now redirect ourselves...
    Response.Redirect("~/error.aspx?aspxerrorpath=" + Server.UrlEncode(Request.Url.PathAndQuery));
}

这将stackTrace和当前用户发送到管理电子邮件地址,并将用户重定向到友好的错误页面。

我如何能够在err中包含完整的跟踪信息?也就是说,如果我在<%@ Page指令中设置了Trace="True",则相同的信息。

我正在探索Trace对象-并发现如何从第三方阅读器读取它如何读取跟踪,但我想在本机代码中读取它。

包括完整的跟踪与堆栈跟踪/错误输出c#

您已经获得了异常的完整StackTrace,我相信您正在查看错误的异常对象:

我认为你的错误在这一行:

Exception objErr = Server.GetLastError().GetBaseException();

我认为正确的应该是:

Exception objErr = Server.GetLastError();

你也可以检查异常,看看是否有InnerException:

if (objErr.InnerException != null)
    err = err + "<hr/>Message:" +  objErr.InnerException.Message;

参见这个问题:Application_Error - GetLastError()或GetLastError().GetBaseException()