2011-06-27 52 views
0

我該如何去做這件事?發生在不同頁面上的ASP.net記錄錯誤

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

我使用這個小類來記錄錯誤,對我如何獲得該頁面的外觀和功能(堆棧跟蹤):

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轉換,因此,未經測試

+0

如此多的不必要的代碼,當您可以設置企業庫日誌記錄塊,並且全部爲您完成。 – Kon

0

您可以通過解析異常消息來確定所有這些。

看看你的消息,並使用正則表達式來提取你需要的信息。

1

異常對象有一個stack trace屬性,它可以準確地告訴您發生錯誤的位置。

此外,檢查出Microsoft Enterprise Library(更具體地說,日誌塊)。

記錄的錯誤提供了堆棧跟蹤,其中包括讓您準確知道發生錯誤的位置。

+0

從nuget提供的Elmah是涉及到錯誤處理時提到的庫和岩石的一部分。 – faester

0

,你可能要考慮的另一個選擇是ELMAH(錯誤日誌記錄模塊和處理的ASP.NET)http://code.google.com/p/elmah/。我想這實際上取決於你的具體需求是什麼。

0

無論測井方法使用,做這樣的事情。(手動輸入可能無法編譯)

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

它將與頁面名稱&方法開始(這是多餘的,但讓生活更容易) 然後它會將EX轉換爲顯示調用堆棧和其他所有好東西的字符串,並將其放入日誌文件

注意:您必須鍵入頁面的名稱來代替<Page Name>

Log4Net和Elmah非常適合讓生活更輕鬆。

相關問題