1

ASP.NETWebサービスで使用するISPサーバーに展開されているクラスライブラリがあります。エラーを追跡したいのですが、この場合、Windowsイベントログにアクセスできません。そのため、StreamWriterクラスを使用してtxtファイルに書き込むと思いました。問題は、絶対パスを指定せず、C:\ Windows \ System32に書き込もうとするファイル名だけを指定した場合、それは私には良くありません。データディレクトリまたはアプリケーションルートを使用するように指示するにはどうすればよいですか?何かご意見は?

4

5 に答える 5

3

Server.MapPathWebアプリケーションに相対的なパスを取得するために使用します。

using (FileStream fs = new FileStream(Server.MapPath("~/logs/logfile.txt"),
                                      FileMode.Append)) {
  //do logging here.
}

以前のポスターのいくつかは、実行中のアセンブリを取得するためにリフレクションを使用することを提案しましたが、それがWebアプリケーションまたはw3wpプロセスをネットするかどうかはわかりません。後者の場合でも、System32フォルダーに書き込もうとすることになります。

于 2010-09-29T19:34:33.620 に答える
2

これが私が以前使用していたものです、それは少し不格好ですが、それは仕事を成し遂げます:

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は私が作成した列挙型です...

于 2010-09-29T20:24:06.493 に答える
1

私のWeb製品では、web.configで次のようにappSettingsブロックを指定します。

<configuration>
    <appSettings>
      <add key="MyLogPath" value="LogPath" />
    </appSettings>
</configuration>

次のようなコードから使用できます

ConfigurationManager.AppSettings["MyLogPath"]

次に、インストーラーで必要な場所に構成することができます。アプリケーションディレクトリにログファイルが必要ない場合があります。

于 2010-09-29T19:27:20.130 に答える
0

チェックアウトしてみてください:

Application.StartupPath;

ドキュメントへのリンクは次のとおりです

アプリケーションを開始した実行可能ファイルのパスを取得します。実行可能ファイル名は含まれません。

string path = Application.StartupPath;

注:ファイル名を追加する必要があります。

于 2010-09-29T19:22:12.747 に答える
0

これを行うことで、実行可能ファイルのパスを見つけることができます。

string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
于 2010-09-29T19:23:46.733 に答える