0

我在多个应用程序中使用 Log4Net 有一段时间了。它一直运行良好,但最近我注意到应用程序突然不再记录。原来这个问题对于我所有的应用程序都是一样的,几个月前它们都突然停止了记录。奇怪的是,当我直接在服务器 (http://localhost/myApp) 上访问应用程序时,日志记录工作,而当我从另一台 PC 访问应用程序时,没有任何记录。我的第一个想法是它必须与文件/文件夹权限有关,但允许“每个人”(Windows 用户组)完全访问日志文件夹并没有帮助。

它们都是在 IIS7(Windows 2008 R2 Enterprise OS)上运行的 ASP.Net MVC 4 应用程序,应用程序池使用“ApplicationPoolIdentity”。Log4Net 版本是 1.2.10.0,我使用的是自定义 CompositeRollingFileAppender。我认为自定义 appender 可能有问题,但是当我尝试切换到标准 RollingFileAppender 时问题仍然存在。我已经在多台服务器上看到了这个问题。

有没有人见过类似的东西?请分享您的想法,因为我不明白为什么在本地或远程访问应用程序应该有任何区别。

这是我的一个应用程序的 web.config 中的 log4net 部分:

<log4net>
    <appender name="RollingFileAppender" type="[mynamespace].CompositeRollingFileAppender">
      <file value="Logs/ApplicationLog.log" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <maxSizeRollBackups value="20" />
      <maximumFileSize value="10MB" />
      <datePattern value="_yyyy-MM-dd" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%utcdate;%property{ErrorCode};%property{Severity};%property{ErrorName};%property{Module};%m%n" />
      </layout>
    </appender>
    <root>
      <priority value="ALL" />
      <appender-ref ref="RollingFileAppender" />
      <level value="Warn" />
    </root>
    <logger name="NHibernate">
      <level value="OFF" />
    </logger>
    <logger name="NHibernate.SQL">
      <level value="OFF" />
    </logger>
  </log4net>
4

1 回答 1

2

事实证明,这个问题与 log4net 没有直接关系,而是与 ASP.Net MVC3 和更新版本默认处理异常的方式有关。几个月前,我们将应用程序从 MVC2 更新到 MVC4,并且由于默认情况下从 global.asax.cs.Application_Start() 执行的这段代码,当 CustomErrors 设置为 RemoteOnly 或 On 时,它“绕过”了我们的异常处理模块:

public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }
    }

这个线程让我走上了正确的轨道。我最终删除了 filters.Add(..) 行,现在它似乎工作正常!

于 2012-11-20T09:23:05.127 回答