Log4net: процесс не может получить доступ к файлу, потому что он используется другим процессом

У меня есть сайт asp.net, который использует log4net. Из-за нескольких сторонних библиотек (таких как NHibernate), есть несколько приложений в нескольких потоках. IIS настроен, поэтому должен быть только один процесс. Я подтвердил это, используя идентификатор процесса в имени файла.

Выдержка из 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)
  • WebSync Frozen Mountain (3.5.1.3), также обратите внимание, что эта библиотека напрямую ссылается на log4net 1.2.11, я использовал bindingRedirect для 1.2.13
  • NHibernate версия 3.1.0.400, это была первая версия, которая не использовала log4net 1.2.10

** NHibernate может быть легко обновлен, если мы думаем, что в этом проблема. WebSync будет сложнее.

0 ответов

Другие вопросы по тегам