我有一个使用log4net的asp.net网站。由于有几个第三方库(如NHibernate),跨多个线程有几个appender。 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.
我的问题是,这些错误中的一些是不可避免的,因为它的多线程,或者如果配置得当,它们永远不会发生。
其他信息:
**如果我们认为这个问题,NHibernate很容易升级。 WebSync会更加困难。