Ведение последних N записей журнала в файле журнала (циклическое ведение журнала) - PullRequest
0 голосов
/ 07 мая 2020

Поддерживает ли журнал 4net циклическое ведение журнала? (Думаю, это правильный термин.)

Я хочу сохранить последние N записей в файле журнала. Скажите N = 100. Если у меня есть 100 записей, а затем я добавляю 101-ю, желаемым поведением было бы удаление 1-й записи из верхней части файла и добавление новой записи журнала внизу, так что всегда было 100 (или меньше) записей, с самая старая запись вверху и самая новая внизу.

По сути, я хочу записывать пару фрагментов информации в файл каждую минуту. Мне интересно только увидеть / сохранить последние 100 записей. Я мог бы использовать собственное решение, но я уже использую журнал 4net для регистрации других проблем и надеялся, что смогу использовать его и для этой цели.

Спасибо,

1 Ответ

0 голосов
/ 07 мая 2020

Стандартное решение - RollingFileAppender с ограничением размера. Вы не можете указать, сколько записей вы хотите сохранить в файле, но если вы поиграете с размером (скажем, 100 КБ), вы можете получить то, что хотите.

Вот пример:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="0" />
    <maximumFileSize value="100KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>

И некоторая документация о том, почему установка maxSizeRollBackups важна в этом случае:

Если установлено в ноль, то файлов резервных копий не будет, и файл журнала будет усечен, когда достигнет MaxFileSize.

MaxSizeRollBackups RollingMode

...