log4net + несколько потоков + Роллинг файл appender

У меня это настройки, такой как log4net в такой как log4net.config, чтобы разрешить несколько потоков пишут в один и тот же файл:

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!-- Minimal locking to allow multiple threads to write to the same file -->
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="logUI.log"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="30"/>
    <datePattern value="-yyyyMMdd"/>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/>
    </layout>
</appender>

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

2 ответов


проблема была решена путем удаления ключа модели блокировки, так как у меня есть только один процесс (IIS, w3wp.exe), который использует тот же регистратор.

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

Так как было сказано здесь:

Если вы используете RollingFileAppender, все становится еще хуже, так как несколько процессов могут попытаться одновременно запустить файл журнала. RollingFileAppender полностью игнорирует модель блокировки при прокатке файлов, прокатка файлов просто несовместима с этим сценарий.

Я думаю, вы получите непредсказуемые результаты.


Я предполагаю, что ваше использование a-sign на datePattern запутывает фреймворк, так что после первого рулона любой журнал запускает событие рулона.

что происходит, когда вы пытаетесь это сделать с

<datePattern value="yyyyMMdd" />

на примере здесь.

чтобы изменить период качения, настройте значение DatePattern. для например, шаблон даты "yyyyMMdd" будет катиться каждый день. посмотреть Система.Глобализация.DateTimeFormatInfo для списка в наличии узоры.