【问题标题】:log4net does not write in IIS 6.0log4net 不在 IIS 6.0 中写入
【发布时间】:2012-08-23 03:23:04
【问题描述】:

我有以下 log4net 配置:

<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <!-- Pattern to output the caller's file name and line number -->
    <conversionPattern value="%date [%thread] %-5level %ndc - %message%newline" />
  </layout>
</appender>

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  <file value="C:/logs/mysystem.log" />
  <appendToFile value="true" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <maximumFileSize value="1024MB" />
  <maxSizeRollBackups value="30" />

  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level - %message%newline" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="Console" />
  <appender-ref ref="RollingFile" />
</root>

在本地机器上它工作正常,但是当我将网站部署到远程服务器(IIS 6.0)时,尽管系统正在运行,但它不会创建日志文件。

AppPool 身份配置为“网络服务”。

有什么想法吗?

【问题讨论】:

    标签: asp.net logging asp-classic iis-6 log4net


    【解决方案1】:

    当应用程序池配置为“网络服务”时,它没有足够的权限写入文件系统,因此不会创建日志文件。

    将应用程序池的身份配置为“本地系统”,它可以正常工作!

    【讨论】:

    • 值得指出的是,“本地系统”还授予对“网络服务”没有的服务器的管理员级别访问权限,并且“本地系统”也无法访问网络,因此任何试图访问的 ASP 代码例如,访问网络共享会失败。
    • 我正在使用 ASP .NET,但我认为您对经典 ASP 的看法是正确的
    • 在这种情况下,我所说的也适用于 ASP.NET。在安全访问权限方面,经典 ASP 的唯一区别在于它总是强制模拟执行脚本。
    【解决方案2】:

    您可以通过使用机器名称作为原则在文件夹上创建 ACE 来授予对日志文件夹的访问“网络服务”访问权限。将池标识更改为“本地系统”可能会产生不良影响,因此我会避免这种情况。

    另一种方法是创建域用户并将此用户添加到机器 IIS_WPG 组。更改池标识以使用此用户。然后,您可以向该用户授予适当的文件夹访问权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      相关资源
      最近更新 更多