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



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

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

AaronS的回答是好的,但我想补充几点:

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

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

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

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

它将返回以下格式的字符串:"%SystemDrive%\inetpub\logs\LogFiles"

最新更新