Неустойчивый log4net RollingFileAppender заблокировал проблему файла

Мы видим неустойчивую проблему о машинах разработки и производства, посредством чего наши файлы журнала не становятся зарегистрированными к.

При выполнении в разработке и отладке использующий Visual Studio мы получаем следующие log4net сообщения об ошибках в окне вывода VS:

log4net:ERROR [RollingFileAppender] Unable to acquire lock on file C:\folder\file.log.

Процесс не может получить доступ к файлу 'C:\folder\file.log', потому что он используется другим процессом.

log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file.
Check your .config file for the <log4net> and <configSections> elements.

Раздел конфигурации должен быть похожим:

<section
  name="log4net"
  type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

Наше текущее обходное решение для проблемы должно переименовать последний файл журнала. Мы, конечно, ожидали бы, что это перестанет работать (из-за вышеупомянутой блокировки файла), но она обычно не делает. Несколько раз переименовывание перестало работать из-за блокировки от процесса aspnet_wp.exe.

Наш log4net раздел конфигурации показывают ниже:

<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\folder\file.log"/>
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <rollingStyle value="Date" />
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="100" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="[Header]&#xA;"/>
      <footer value="[Footer]&#xA;"/>
      <conversionPattern value="%date %-5level %logger ${COMPUTERNAME} %property{UserHostAddress} [%property{SessionID}] - %message%newline"/>
    </layout>
  </appender>
  <root>
    <level value="INFO"/>
    <appender-ref ref="RollingLogFileAppender"/>
  </root>
</log4net>

Как упомянуто, мы видим это периодически на машинах, но после того как проблема происходит, она сохраняется.

108
задан user151019 15 February 2013 в 11:10
поделиться

1 ответ

Попробуйте добавить

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

к элементу . Это влияет на производительность, так как это означает, что log4net будет блокировать файл, записывать в него и разблокировать его для каждой операции записи (в отличие от поведения по умолчанию, которое приобретает и удерживает блокировку в течение длительного времени).

Одним из последствий поведения по умолчанию является то, что если вы используете его под Web-сайтом, который выполняется под несколькими рабочими процессами, запущенными на одной машине, каждый из них будет пытаться приобрести и удержать эту блокировку бесконечно, а двое из них просто проиграют. Изменение модели блокировки на минимальную блокировку работает вокруг этой проблемы.

(При отладке, некорректное завершение и вращение множества новых рабочих процессов - это именно тот тип вещей, который может произойти.)

Удачи!

164
ответ дан 24 November 2019 в 03:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: