【问题标题】:Where do logs go when running ASP.NET Core on IIS 7.5?在 IIS 7.5 上运行 ASP.NET Core 时,日志在哪里?
【发布时间】:2016-11-10 20:02:32
【问题描述】:

我发布这个并回答它,因为这让我很长一段时间都感到困惑。我的web.config 中有以下行:

<aspNetCore processPath="dotnet" arguments=".\XXX.Server.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

显然,这应该记录到logs\stdout,但是当我查看时,那里什么都没有。我进行了一场疯狂的追逐,在整个磁盘中搜索任何名为“log”(返回太多)或“stdout”(没有返回)的东西,但仍然无法弄清楚。

【问题讨论】:

  • 我浪费了很多时间没有注意到我有stdoutLogEnabled="false",我自己没有修改过,所以去看看......

标签: iis asp.net-core


【解决方案1】:

您可能可以检查您机器上的事件查看器 -> 应用程序以查看是否记录了任何错误,这可以解释您的日志文件未生成的原因。

但是,最可能的原因是 IIS 没有写入该日志文件夹的权限。

  1. 右键文件夹->安全
  2. 确保 IIS_IUSRS 用户具有以下权限:读取和执行、列出、写入(默认情况下可能缺少写入)

【讨论】:

  • 为什么 IIS 可能有权创建单个日志文件,但没有创建日志文件夹?
  • @AndrewWilliamson 不幸的是我不确定:(
  • @VlatkoVlahek 我的 IIS_IUSRS 拥有日志文件夹的完全权限,但没有创建日志文件!
  • @HamidEbr 你能检查一下 web.config 中你的 stdoutLogEnabled 是否设置为 true 吗?另外,应用启动时事件查看器内部是否有任何错误?
  • @VlatkoVlahek stdoutLogEnabled 为真,事件查看器内部也存在一些错误。
【解决方案2】:

您必须确保日志文件夹存在! IIS 不会为您服务。如此简单的解决方案解决了这个令人恼火的问题。

【讨论】:

  • 对我来说,它是在根目录添加 logg 文件夹,在 approot 和 wwwroot 旁边,使用 stdoutLogFile="..\logs\stdout.log"
  • 文件夹应该有什么样的权限?
  • 读取和执行、列出、写入(默认情况下可能缺少写入) - 请参阅Vlatko's answer
  • 似乎这已在较新版本中得到修复。当前正在运行 IIS 10,并且此文件夹与日志文件一起创建。
【解决方案3】:

我创建了日志文件夹,但仍然没有记录任何内容。我发现您可以使用 home/logfiles 下的现有文件夹并使其工作而无需创建文件夹。 这个解决方案对我有用:

1) 打开在已发布应用程序的根文件夹中创建的 web.config 文件。

2) 将 stdoutlogEnabled 设置为 true 并将 stdoutLogFile 设置为 \?\%home%\LogFiles\stdout,如下所示:

<aspNetCore processPath="dotnet" arguments=".\SellCarsHereV2.dll" stdoutLogEnabled="true" stdoutLogFile="\\?\%home%\LogFiles\stdout" />

然后您可以转到该路径并下载文件或使用 Azure 门户(如果它托管在 Azure 中)。如果您使用的是 Azure 门户:

1) 转到应用服务。

2) 转到高级工具,它会将您带到 https://{your app service}.scm.azurewebsites.net/

3) 点击调试控制台菜单 --> CMD

4) 点击日志文件

5) 您将看到一个名为 stdout_*.log 的文件,您可以单击铅笔查看它。如果需要,您也可以下载该文件。

【讨论】:

  • 我喜欢这个,因为它使用了现有的日志文件夹。在我的一生中,我无法让任何 KuDu 写入操作在 Azure 上工作(创建一个新文件夹和编辑 web.config 都给了我权限错误,即使这些文件没有标记为只读)
【解决方案4】:

根据您的 web.config 文件中提供的stdoutLogFile=".\logs\stdout"logs 目录应创建在 web.config 旁边的the publish directory 内。

要创建logs 子目录,您可以使用ASP.NET Core directory structure 中描述的方法。

只需将其粘贴到您已发布项目的 *.csproj 文件的末尾

<Project>
...
  <Target Name="CreateLogsFolder" AfterTargets="Publish">
    <MakeDir Directories="$(PublishDir)logs" 
              Condition="!Exists('$(PublishDir)logs')" />
  </Target>
</Project>

在此更改后的发布过程中,如果输出目录中不存在logs 目录,则应创建它。

如果你运行例如: dotnet publish --output &lt;path_to_your_publish_folder&gt; 你应该在&lt;path_to_your_publish_folder&gt; 中找到logs 目录

【讨论】:

    【解决方案5】:

    为了获取日志,我执行了以下步骤:

    1. 如上所述,创建文件夹日志并授予对IIS_IUSRS 的写入权限
    2. web.config中设置绝对路径:stdoutLogFile="C:\xxx\xxx\logs"
    3. 回收应用程序池
    4. 停止,启动网站

    编辑

    第 2 步也适用于相对路径 stdoutLogFile=".\logs\stdout"

    【讨论】:

      【解决方案6】:

      检查事件查看器。如果您像我一样,您会在 Application\Event 日志中看到一个条目“无法创建 stdoutLogFile c:....logs\stdout_....”。您必须自己在那里创建日志文件夹。一旦我创建了“日志”文件夹 stdout_.... 文件就开始转储到其中。当然还要确定stdoutLogEnabled="true"。预期文件夹位置的位置将显示在事件查看器日志中。这很重要,因为它可能不是您认为应该放置的位置。

      【讨论】:

        【解决方案7】:

        我注意到当您访问该网站时不会立即创建日志。我允许对 IIS_IUSRS 进行写访问,创建“日志”文件夹,重新启动 app_pool,几分钟后日志就在那里。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2019-05-12
          • 1970-01-01
          • 1970-01-01
          • 2011-06-13
          相关资源
          最近更新 更多