3

Azure (および IIS 7.5) で実行されている多数のサーバーがあります。ログ ファイルをサーバーから中央の場所に定期的に集約するスタンドアロン アプリケーションを作成しようとしています。集約すると、文字通り、カスタム アップローダーをディレクトリに向けて、それを実行させることになります。

自分のサイト用に構成された logdir の場所を (プログラムで) 取得する簡単な方法はありますか?

4

2 に答える 2

5

AaronS の回答は良い方向ですが、追加したい点がいくつかあります。

  • WebRole.cs から ServerManager にアクセスする場合は、ServerManager の使用を許可するために、ロールを evelated コンテキストで実行する必要があります。
<Runtime executionContext="elevated"/>
  • AaronS が既に説明したように、ServerManager を使用してログ ディレクトリにアクセスできます。このサンプル コードは、もう少し "Azure フレンドリー" です。

using (ServerManager serverManager = new ServerManager())
{
    var siteName = RoleEnvironment.CurrentRoleInstance.Id + "_Web";
    var id = serverManager.Sites[siteName].Id;
    var logFile = serverManager.Sites[siteName].LogFile;

    var iisLogDirectory = String.Format("{0}\\W3SVC{1}", logFile.Directory, id);
}

  • 単純に Windows Azure Diagnostics を使用しないのはなぜですか? MSDNの記事からわかるように、 wadiis -failedreqlogfiles、wadiis -logfiles、wad -crash-dumpは自動的に考慮されます。これは、DiagnosticMonitor を適切に構成すると、ログが X 分ごとにストレージ アカウントに送信されることを意味します。複数のサーバーを実行している場合 (1 つしかない場合でも)、中央の場所ですべてのログにアクセスできるため、これは優れています。ファイルを閲覧するときにエクスプローラーのようなエクスペリエンスが得られるため、最近 CloudXplorer を使用してログにアクセスしました。

注:私の 3 つのコメントでは、PaaS WebRole (IaaS VM ではなく) を使用していると仮定しています。

于 2012-08-09T21:35:12.250 に答える
2

次のようなものを使用して、IIS7 ログ ファイルの場所を取得できます。

using (ServerManager manager = ServerManager.OpenRemote("yourservername"))
{
     Site defaultSite = manager.Sites[0];
     string loglocation=defaultSite.LogFile.Directory;
}

「%SystemDrive%\inetpub\logs\LogFiles」の形式の文字列を返します。

于 2012-08-09T21:02:09.500 に答える