Как мне настроить RollingFileAppender для прокрутки по дате и размеру с помощью log4net?

StackOverflow https://stackoverflow.com/questions/243572

Вопрос

Я настраиваю log4net на использование составного RollingFileAppender, чтобы текущий файл всегда имел имя logfile.log файл журнала.log и все последующие файлы будут названы файл журнала-ГГГГ.ММ.дд.далее.log где продолжение порядковый номер, если журнал превышает определенный размер в течение одного дня.К сожалению, у меня было очень мало успехов в настройке такой установки.

Редактировать:

Моя текущая конфигурация приведена ниже.Он был обновлен на основе нескольких ответов, которые подводят меня достаточно близко к моим потребностям.При этом генерируются файлы следующего формата: Лог-файл_yyyyy.MM.dd.log.seq

<log4net>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingFileAppender" />
    </root>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs\\logfile"/>
        <staticLogFileName value="false"/>
        <appendToFile value="true"/>
        <rollingStyle value="Composite"/>
        <datePattern value="_yyyy.MM.dd&quot;.log&quot;"/>
        <maxSizeRollBackups value="10"/>
        <maximumFileSize value="75KB"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="FATAL" />
        </filter>
    </appender>

</log4net>

Одно интересное замечание, устанавливающее

<staticLogFileName value="false"/>

значение true приводит к тому, что регистратор не записывает никаких файлов.

Это было полезно?

Решение

Мы используем следующее (в Log4J):

<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="Applog.log"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/>
    </layout>
</appender>

Это дает нам Applog.log.гггг-ММ-дд Файлы

Другие советы

Согласно исходному коду log4net RollingFileAppender:

protected string GetNextOutputFileName(string fileName)
{
    if (!m_staticLogFileName) 
    {
        fileName = fileName.Trim();

        if (m_rollDate)
        {
            fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo);
        }

        if (m_countDirection >= 0) 
        {
            fileName = fileName + '.' + m_curSizeRollBackups;
        }
    }

    return fileName;
}

Поэтому я предполагаю, что невозможно сгенерировать файл журнала с нужным вам именем.Я думаю, это что-то вроде logfileYYYY-MM-dd.n.log или что-то подобное.

Попробуйте присвоить этому свойству значение true:

Значение preserveLogFileNameExtension="истина"

Я верю, что этот трюк поможет вам!Однако для свойства preserveLogFileNameExtension требуется последняя версия log4net, вы можете найти ее здесь: logging.apache.org/log4net/download.html

Обратите внимание, что в данном случае

            <maxSizeRollBackups value="10"/>

будет проигнорирован.

Видишь это ответ на аналогичный вопрос log4net

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top