2012-04-18 2 views
10

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

<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="log\UI.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?

+0

любое решение, позволяющее каждому потоку писать на разные файлы (т. Е. Каждый поток имеет собственный файл)? –

ответ

10

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

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

Так как было сказано here:

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

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

0

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

Что происходит, когда вы попробуете это

<datePattern value="yyyyMMdd" /> 

на примере here.

Чтобы изменить период прокатки, отрегулируйте значение DatePattern. Для примера образец даты «yyyyMMdd» будет катиться каждый день. См. System.Globalization.DateTimeFormatInfo для списка доступных шаблонов .

Смежные вопросы