日志文件停止在生产服务器上写入

时间:2017-10-03 11:26:54

标签: c# .net iis log4net

编辑 - 我想我已经发现了根本原因 - 系统管理员在服务器上安装了NewRelic,它以某种方式覆盖了我的日志记录。有什么办法可以解决这个问题吗?

我有几个应用程序在几个星期前才正常登录 - 系统管理员发誓他的结果没有任何改变,同样我认为我的内容没有任何改变。

应用程序位于Windows Servier 2012 R2,IIS 8.5。

我使用log4net,配置文件如下所示:

 <log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="file" />
  </root>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="logs/application_log.xml"/>
    <appendToFile value="true" />
    <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
      <locationInfo value="true"/>
    </layout>
    <param name="Encoding" value="utf-8" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
  </appender>
</log4net>

AssemblyInfo将此附加到结尾

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
  • 我传统上不得不在网站根目录中添加“logs”文件夹,并将“IIS AppPool \ MyAppPool”用户添加到文件夹权限中,从而完全控制。

  • IIS应用程序池设置为ApplicationPoolIdentity。

这就足够了,日志会开始捕获 - 而build + logs在我的本地机器上运行正常。

  • 我也尝试过添加NETWORKSERVICE,IIS / IUSRS等

我一直试图解决这个问题已经太久了,所以想知道我还有什么可以尝试的吗?

1 个答案:

答案 0 :(得分:2)

确实有!打开log4net的调试日志记录功能。

https://stackoverflow.com/a/756241/4824030

您的配置应该是这样的。

<configuration>

...

<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="file" />
  </root>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="logs/application_log.xml"/>
    <appendToFile value="true" />
    <layout type="log4net.Layout.XmlLayoutSchemaLog4j">
      <locationInfo value="true"/>
    </layout>
    <param name="Encoding" value="utf-8" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
  </appender>
</log4net>

...

<appSettings>
   <add key="log4net.Internal.Debug" value="true"/>
</appSettings>

...   

<system.diagnostics>
    <trace autoflush="true">
        <listeners>
            <add 
                name="textWriterTraceListener" 
                type="System.Diagnostics.TextWriterTraceListener" 
                initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
</system.diagnostics>

...

</configuration>