2016-08-04 55 views
1

我正在創建一個類來記錄.NET Web窗體應用程序中的錯誤。但是,因爲它是一個單獨的類,所以我有很多映射到正確路徑的問題。通常我會使用〜/,或/,但這不起作用。我需要它,以便無論Web窗體頁面調用該類,應用程序都可以找到要寫入的相應文件。例如,現在的代碼代表,我得到以下錯誤:ASP.NET Web窗體 - 從C#類獲取路徑到文件

$exception {"Could not find a part of the path 'C:\\Program Files (x86)\\IIS Express\\logs\\errors.txt'."} System.Exception {System.IO.DirectoryNotFoundException} 

,做記錄類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.IO; 


namespace Ticket_System 
{ 

    public static class logger 
    { 

    const string PATH = "logs/errors.txt"; 
     public static void logError(Exception ex) { 
      using (StreamWriter stream = File.AppendText(PATH)) 
      { 
       stream.Write(ex.Source + " " + ex.Message + " " + ex.StackTrace + "/n/n"); 
      } 
     } 
    } 
} 

我如何,logger.cs內,能夠可靠地訪問該文件(位於子目錄,日誌中),而不管頁面調用它。

謝謝!

+0

您能否澄清一下:您是否試圖說當您使用不同路徑的頁面調用時要使用不同的日誌目錄,或者您是否說您總是希望找到特定的日誌目錄位置,而不管哪個頁面調用您的日誌方法?您的錯誤顯示您的代碼當前正在嘗試登錄的位置,但您不太清楚您希望的日誌位置。另外,爲什麼你不使用日誌框架? – StriplingWarrior

+0

無論發生錯誤的頁面如何,我都希望它登錄到同一個文件。我只想讓日誌成爲位於網站子目錄(稱爲日誌)中的簡單的平面文本文件。謝謝! – KellyMarchewa

+1

你有沒有試過AppDomain.CurrentDomain – Scrobi

回答

2

您可以使用HttpRuntime.AppDomainAppPath來獲取當前網站的路徑,或者(如果您知道您始終會在請求的上下文中調用此路徑),則可以使用HttpContext.Current.Server.MapPath("~")

但是,我強烈建議您使用現有的日誌記錄框架,而不是試圖推出自己的日誌框架。從長遠來看,它會爲你節省很多頭痛。