ASP.NETWebサービスで使用するISPサーバーに展開されているクラスライブラリがあります。エラーを追跡したいのですが、この場合、Windowsイベントログにアクセスできません。そのため、StreamWriterクラスを使用してtxtファイルに書き込むと思いました。問題は、絶対パスを指定せず、C:\ Windows \ System32に書き込もうとするファイル名だけを指定した場合、それは私には良くありません。データディレクトリまたはアプリケーションルートを使用するように指示するにはどうすればよいですか?何かご意見は?
5 に答える
Server.MapPath
Webアプリケーションに相対的なパスを取得するために使用します。
using (FileStream fs = new FileStream(Server.MapPath("~/logs/logfile.txt"),
FileMode.Append)) {
//do logging here.
}
以前のポスターのいくつかは、実行中のアセンブリを取得するためにリフレクションを使用することを提案しましたが、それがWebアプリケーションまたはw3wpプロセスをネットするかどうかはわかりません。後者の場合でも、System32フォルダーに書き込もうとすることになります。
これが私が以前使用していたものです、それは少し不格好ですが、それは仕事を成し遂げます:
using System;
using System.Collections.Generic;
using System.Web.UI;
public static class Logger
{
private static readonly Page Pge = new Page();
private static readonly string Path = Pge.Server.MapPath("~/yourLogPath/Log.txt");
private const string LineBreaker = "\r\n\r======================================================================================= \r\n\r";
public static void LogError(string myMessage, Exception e)
{
const LogSeverity severity = LogSeverity.Error;
string messageToWrite = string.Format("{0} {1}: {2} \r\n\r {3}\r\n\r {4}{5}", DateTime.Now, severity, myMessage, e.Message, e.StackTrace, LineBreaker);
System.IO.File.AppendAllText(Path, messageToWrite);
}
}
このクラスは、Webサイト自体とは別に、独自のプロジェクトで使用し、他のすべてのWebサイト以外のプロジェクトで使用しました...
編集:ところで、LogSeverityは私が作成した列挙型です...
私のWeb製品では、web.configで次のようにappSettingsブロックを指定します。
<configuration>
<appSettings>
<add key="MyLogPath" value="LogPath" />
</appSettings>
</configuration>
次のようなコードから使用できます
ConfigurationManager.AppSettings["MyLogPath"]
次に、インストーラーで必要な場所に構成することができます。アプリケーションディレクトリにログファイルが必要ない場合があります。
チェックアウトしてみてください:
Application.StartupPath;
ドキュメントへのリンクは次のとおりです
アプリケーションを開始した実行可能ファイルのパスを取得します。実行可能ファイル名は含まれません。
string path = Application.StartupPath;
注:ファイル名を追加する必要があります。
これを行うことで、実行可能ファイルのパスを見つけることができます。
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);