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

时间:2012-08-09 20:45:05

标签: iis logging azure windows-server-2008

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

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

2 个答案:

答案 0 :(得分:5)

AaronS的答案是朝着良好的方向发展,但我想补充一些观点:

  • 如果您想从WebRole.cs访问ServerManager,您需要在平均值上下文中运行您的角色,以便允许使用ServerManager。
<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诊断?正如您从MSDN article,wad- iis-failedreqlogfiles ,wad- iis-logfiles 和wad- 崩溃转储中看到的那样>会自动考虑在内。这意味着如果您正确配置DiagnosticMonitor,它会每隔X分钟将您的日志发送到存储帐户。如果您运行多个服务器(即使您只有1个服务器),这也很棒,因为您可以在中心位置访问所有日志。我最近使用CloudXplorer访问我的日志,因为它在浏览文件时为您提供类似资源管理器的体验。

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

答案 1 :(得分:2)

您可以使用类似于以下内容的方式获取IIS7日志文件位置:

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

它将以这种格式返回一个字符串:“%SystemDrive%\ inetpub \ logs \ LogFiles”

相关问题