2008-10-28 9 views
20

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

Edit:

Моя текущая конфигурация наклеена ниже. Он был обновлен на основе нескольких ответов, которые меня достаточно близко для моих нужд. Это создает файлы формата: logfile_YYYY.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"/> 

истина заставляет регистратор не писать какие-либо файлы.

ответ

13

Мы используем следующие (в 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.yyyy-ММ-ДД файлы

+1

В документации log4j: DailyRollingFileAppender обнаружил проблемы синхронизации и потерю данных. Сопутствующий компонент log4j включает альтернативы, которые следует учитывать для новых развертываний и которые обсуждаются в документации для org.apache.log4j.rolling.RollingFileAppender. – 2015-09-11 15:46:11

4

Согласно 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 или тому подобное.

+0

@Ryan, Leandro: Также кажется, что нет простого способа отменить это поведение. `GetNextOutputFileName` не является виртуальным и другими методами, которые называют его ссылкой на частные переменные, поэтому вы не можете просто скопировать их код и заменить вызов. Я думаю, что лучшее, что вы можете сделать, это иметь уникальное имя файла каждый раз, используя что-то вроде параметра шаблона даты, который вы использовали. – 2011-02-22 22:45:13

0

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

  <maxSizeRollBackups value="10"/> 

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

Смотрите эту answer на аналогичный вопрос log4net

1

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

preserveLogFileNameExtension значение = "истинный"

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

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

  • Нет связанных вопросов^_^