2

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 はより困難になります。

4

0 に答える 0