Search code examples
log4netlog4net-configuration

Why doesn't my log4net appender create a file each day in year-month-day structure


I'm trying to get log4net to log to files in a specific folder structure. [logfolder]/year/month/day_file.log

With the configuration I have now, the initial log file is perfect. It creates the year and month folder and starts with the correct file. The problem is that it does not create new files in my desired structure each next day, but it creates a new file by appending the new date to the first log file name. As you can see, it now also does not create the desired month folders.

What I get now is this:

└───2018
    └───03
            28-03-2018_myLogFile.log
            28-03-2018_myLogFile.log28-03-2018
            28-03-2018_myLogFile.log29-03-2018
            28-03-2018_myLogFile.log30-03-2018
            28-03-2018_myLogFile.log31-03-2018
            28-03-2018_myLogFile.log01-04-2018
            28-03-2018_myLogFile.log02-04-2018

But what I need it this:

└───2018
    ├───03
    │       28-03-2018_myLogFile.log
    │       29-03-2018_myLogFile.log
    │       30-03-2018_myLogFile.log
    │       31-03-2018_myLogFile.log
    │
    └───04
            01-04-2018_myLogFile.log
            02-04-2018_myLogFile.log
            03-04-2018_myLogFile.log

The configuration I have now is this:

  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
      <file type="log4net.Util.PatternString" value="App_Data/log/%date{yyyy}/%date{MM}/%date{dd-MM-yyyy}_myLogFile.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="dd-MM-yyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %M - %message%newline" />
      </layout>
    </appender>

What did I do wrong? Or should I solve this by writing my own appender?


Solution

  • I solved it, but I have to give credit to @sgmoore, though the answer was not complete. The following solution creates a file in a ../log/yyyy/MM/dd-MM-yyyy_myLogFile.log structure. This version works better than the proposed version by @sgmoore.

    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender, log4net">
      <file type="log4net.Util.PatternString" value="App_Data/log/" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <datePattern value="yyyy/MM/dd-MM-yyyy'_myLogFile.log'" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger %M - %message%newline" />
      </layout>
    </appender>