Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同页面上发生的ASP.net日志记录错误_C#_Asp.net_Exception_Logging - Fatal编程技术网

C# 不同页面上发生的ASP.net日志记录错误

C# 不同页面上发生的ASP.net日志记录错误,c#,asp.net,exception,logging,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" /

我该怎么做呢

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

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

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

异常对象有一个属性,它可以准确地告诉您错误发生的位置

另外,请检查(更具体地说是日志记录块)


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

我正在使用这个小类记录错误,看看我是如何获得页面和函数的(Stacktrace):

这对我来说已经足够了


注意:从VB.NET转换而来,因此未经测试

您可能希望查看的另一个选项是ELMAH(ASP.NET的错误日志记录模块和处理程序)。我想这取决于您的具体需求。

使用,记录错误消息。要获得帮助,请查看这些和。

无论您使用何种日志记录方法,请执行类似操作。(手动输入可能无法编译)

试试看
{
DoignStuff();
}
捕获(例外情况除外)
{
WriteLine(“调用DoingStuff()Ex:+Ex.ToString()时出现异常);
}
它将从页面名称和方法开始(这是多余的,但会使生活更轻松) 然后它将把EX转换成一个字符串,显示调用堆栈和其他各种好东西,并将其放入日志文件中

注意:您必须在
位置键入页面名称


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

Elmah
可从nuget获得,它是上述库的一部分,在错误处理方面非常重要。当您可以设置企业库日志块时,不必要的代码太多了,一切都为您完成了。
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
            }
        }
    }
}
try
{
  DoignStuff();
}
catch( Exception ex)
{
Trace.WriteLine( "Exception in <Page Name>  while calling DoingStuff() Ex:"+ ex.ToString() );
}