views:

9509

answers:

3

I am configure log4net to use a composite RollingFileAppender so that the current file is always named logfile.log and all subsequent files are named logfile-YYYY.MM.dd.seq.log where seq is the sequence number if a log exceeds a certain size within a single day. Unfortunately, I have had very little success in configuring such a setup.

Edit:

My current configuration is pasted below. It has been updated based on several answers which gets me close enough for my needs. This generates files of the format: 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>

One interesting note, setting

<staticLogFileName value="false"/>

to true causes the logger to not write any files.

+3  A: 

According to log4net RollingFileAppender source code:

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;
}

So I'm guessing it's not possible to generate a log file with the name you need. I think it's something like logfileYYYY-MM-dd.n.log or similar.

Leandro López
+4  A: 

We use the following (in 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>

This gives us Applog.log.yyyy-MM-dd files

paul
A: 

Note that is this case the

            <maxSizeRollBackups value="10"/>

will be ignored.

See this answer to a similar log4net question

rathkopf