【问题标题】:Programmatically retrieving IIS log file location in an ASP.NET application以编程方式检索 ASP.NET 应用程序中的 IIS 日志文件位置
【发布时间】:2012-02-27 09:33:06
【问题描述】:

我正在尝试确定我的 ASP.NET 应用程序的 IIS 日志文件位置。我尝试了 WMI,但无法找到它。有什么建议吗?

注意:我希望能够以编程方式检索位置;在我的应用程序中以供进一步使用。 编辑:这是我的代码:这有效,但没有给我日志的实际物理目录位置。所以这基本上没用。

ManagementPath p2=new ManagementPath("IIsLogModule.Name='logging/Microsoft IIS Log File Format'");
ManagementObject log = new ManagementObject(scope, p2, objectGet);
log.Get();
logPath.Text = log["__PATH"].ToString();

【问题讨论】:

  • 显示你的代码??你到目前为止做了什么,所以我们可以用魔杖帮忙:D
  • 我认为你试图让你的生活变得困难。这个文件在哪里是你控制的,并且知道,为什么你会发现他们在寻找一些可能无权访问它们的设置文件?
  • 我编辑了我的问题。但我不相信它会帮助你,因为这个代码块显示的东西与我需要的不同。感谢您的快速回复。
  • 我知道我的日志文件在哪里,但这是为客户开发的。我无法找到他们的保存位置,因此我必须以编程方式找到我的应用程序用户的 IIS 日志,以处理该数据。
  • @Slethron 你在正确的轨道上,但即使你得到它们,可能你没有阅读它们的权限,所以我认为这是你可以添加到应用程序设置中的东西 -或类似的东西,因为客户端至少需要设置权限。

标签: asp.net iis wmi


【解决方案1】:

在 IIS7 上你可以使用 Microsoft.Web.Administration 程序集,Site 类有一个名为LogFile 的属性,你可以获取有关站点日志文件的各种信息,例如可以使用以下代码获取日志文件目录:

  ServerManager manager = new ServerManager();
  Site mySite = manager.Sites["SiteName"];
  Response.Write("Log file directory : " + mySite.LogFile.Directory + "\\W3svc" + mySite.Id.ToString());

我不太喜欢带有站点目录前缀的硬编码部分,但没有找到其他更好的方法

【讨论】:

    【解决方案2】:

    您应该能够使用 ADSI(或 WMI)来执行此操作 - 浏览 IIS 元数据库并查找网站节点的“LogFileDirectory”属性。例如,

    var root = new DirectoryEntry(@"IIS://localhost/W3SVC");
    var sites = root.Children;
    foreach(DirectoryEntry site in sites) {
       var name = site.Properties["ServerComment"][0];
       var logFile = site.Properties["LogFileDirectory"][0];
    }
    

    免责声明:未经测试的代码

    使用类似的想法参见this powershell example

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 2011-12-11
      • 2012-04-25
      • 2013-05-12
      • 1970-01-01
      • 2013-09-20
      • 2020-12-30
      • 2017-09-22
      相关资源
      最近更新 更多