0

I'd like to have four log files per day having date as part of the file name. Something like:

MYAPP-20190108-4.log
MYAPP-20190108-3.log
MYAPP-20190108-2.log
MYAPP-20190108-1.log
MYAPP-20190107-4.log
MYAPP-20190107-3.log
MYAPP-20190107-2.log
MYAPP-20190107-1.log

I know I can leverage date pattern but then I end up with 24 files...

    <Logging Message2FilePath="C:\Messages">
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="RollingStyle" value="Composite" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="StaticLogFileName" value="false" />
      <param name="AppendToFile" value="true" />
      <param name="MaximumFileSize" value="10MB" />
      <file type="log4net.Util.PatternString" value="C:\Logs\MYAPP-" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{dd-MM-yy HH:mm:ss,fff} [%-5p][%3t]%m%n" />
      </layout>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <datePattern value="yyyyMMdd-HH'.log'" />
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{dd-MM-yy HH:mm:ss,fff} [%-5p][%3t]%m%n" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
</Logging>

Key settings:

<param name="RollingStyle" value="Composite" />

<file type="log4net.Util.PatternString" value="C:\Logs\MYAPP-" />

<datePattern value="yyyyMMdd-HH'.log'" />

Resulting output:

MYAPP-20190107-13.log
MYAPP-20190107-12.log
MYAPP-20190107-11.log
MYAPP-20190107-19.log
MYAPP-20190107-09.log

Would that be possible ?

Community
  • 1
  • 1
krul
  • 2,211
  • 4
  • 30
  • 49
  • 2
    Answer of [This](https://stackoverflow.com/questions/12100624/change-log4net-config-to-create-every-x-hour-new-log) question suggests an approach explained [Here](https://stackoverflow.com/questions/3719546/have-a-log4net-rollingfileappender-set-to-roll-weekly). You can try approach by changing it as per your requirements. – Chetan Jan 07 '19 at 09:08

1 Answers1

1

Thanks for the pointer @ChetanRanpariya. I had to override RollingFileAppender, here is a solution:

class RollingOverDaypartFileAppender : RollingFileAppender
{
    private DateTime nextRolloverDate;

    public RollingOverDaypartFileAppender(){}

    protected override void AdjustFileBeforeAppend()
    {
        if (DateTime.Now.Hour % 6 != 0) return;

        base.AdjustFileBeforeAppend();
    }
}
krul
  • 2,211
  • 4
  • 30
  • 49