获取IIS日志位置 - 服务器2k8&c#

kos*_*osh 3 iis logging azure windows-server-2008

我们在Azure(和IIS 7.5)上运行了一堆服务器.我试图编写一个独立的应用程序,定期将日志文件从服务器聚合到一个中心位置.通过聚合,它实际上是将我们的自定义上传器指向目录并让它做到这一点.

是否有一种简单的方法(以编程方式)获取为我的网站配置的logdir的位置?

San*_*tia 5

AaronS的回答是好的方向,但我想补充一些要点:

  • 如果要从WebRole.cs访问ServerManager,则需要在平均化的上下文中运行您的角色,以便允许使用ServerManager.
<Runtime executionContext="elevated"/>
Run Code Online (Sandbox Code Playgroud)
  • 与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);
}
Run Code Online (Sandbox Code Playgroud)
  • 为什么不简单地使用Windows Azure诊断?正如你可以从看MSDN文章,wad- IIS的failedreqlogfiles,wad- IIS的日志文件,并wad- 崩溃转储被自动考虑.这意味着如果您正确配置DiagnosticMonitor,它会每隔X分钟将您的日志发送到存储帐户.如果您运行多个服务器(即使您只有1个服务器),这也很棒,因为您可以在中心位置访问所有日志.我最近使用CloudXplorer访问我的日志,因为它在浏览文件时为您提供类似资源管理器的体验.

注意:对于我的3个评论,我假设您使用的是PaaS WebRole(而不是IaaS VM).