2016-08-04 4 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("~")を使用できます。

ただし、自分でロールするのではなく、既存のログフレームワークを使用することを強くお勧めします。長期的には頭痛の種になるでしょう。

関連する問題