2

我有一个使用 log4net 的 asp.net 网站。由于有几个第三方库(如 NHibernate),跨多个线程有几个附加程序。IIS 已设置,因此应该只有一个进程。我已经通过使用文件名中的进程 ID 确认了这一点。

Web.config 摘录:

<appender name="AppAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="Logs\App_[%processid]_.log" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="yyyy-MM-dd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="false" />
    <preserveLogFileNameExtension value="true" />
    <threshold value="DEBUG" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value=" %date %-5level [%property{SessionId}] - %message%newline" />
    </layout>
</appender>

在 IIS 中回收应用程序池时,有时会出现以下错误:

log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Unable to acquire lock on file App_[6844]_2014-12-18.log. Access to the path 'App_[6844]_2014-12-18.log' is denied.

我的问题是,其中一些错误是不可避免的,因为它是多线程的,或者如果配置正确,它们永远不会发生。

附加信息:

  • 我正在使用 log4net 1.2.13(安装在 nuget 上)
  • Frozen Mountain 的 WebSync (3.5.1.3),还要注意这个库直接引用 log4net 1.2.11,我使用了 bindingRedirect 到 1.2.13
  • NHibernate 版本 3.1.0.400,它是第一个不使用 log4net 1.2.10 的版本

**如果我们认为这是问题,NHibernate 可以轻松升级。WebSync 会更困难。

4

0 回答 0