log4net を利用している asp.net Web サイトがあります。いくつかのサードパーティ ライブラリ (NHibernate など) があるため、複数のスレッドにまたがるいくつかのアペンダがあります。IIS がセットアップされているため、プロセスは 1 つだけです。ファイル名のプロセス 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 を直接参照していることに注意してください。1.2.13 への bindingRedirect を使用しました。
- NHibernate バージョン 3.1.0.400、log4net 1.2.10 を使用しない最初のバージョン
**それが問題だと思われる場合、NHibernate は簡単にアップグレードできます。WebSync はより困難になります。