The correct log4Net RollingFileAppender configuration
I was trying to do a simple thing: configure a daily rolling log for log4net, meaning that I wanted that log files would be created daily and the name of the files would contain the date. The log was already configured and working with a normal FileAppender, so all I had to do was find the correct configuration. There are several answers on the Internet regarding this. I immediately went to the trusty StackOverflow and read the first answers, copy pasted lazily, and it seemed to work. But it did not. So warning, the first answer on StackOverflow about this is wrong.
So, my logs had to be named something like Application_20150420.log. That means several things:
This is the working configuration:
As you can see, it is a little counter-intuitive. You do not need to specify the date in the file name, it will be added automatically, and you absolutely need to use preserveLogFileNameExtension, otherwise your files would look like Application_.log20140420
So, my logs had to be named something like Application_20150420.log. That means several things:
- The name of the appender class has to be set to log4net.Appender.RollingFileAppender
- The name of the log files need to start with Application_ and end in .log
- The name of the log files need to contain the date in the correct format
- The logger needs to know that the files need to be created daily
This is the working configuration:
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="DEBUG" />
</filter>
<file type="log4net.Util.PatternString" value="c:\logfiles\Application_.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<preserveLogFileNameExtension value="true"/>
<staticLogFileName value="false" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline"/>
</layout>
</appender>
As you can see, it is a little counter-intuitive. You do not need to specify the date in the file name, it will be added automatically, and you absolutely need to use preserveLogFileNameExtension, otherwise your files would look like Application_.log20140420
Comments
I think it was there from the beginning. If you look at the release notes (https://logging.apache.org/log4net/release/release-notes.html) they begin from version 1.2.0 and the only mention of preserveLogFileNameExtension is a bug fixed in version 1.3.2
SideriteThanks for the article. What version of log4net introduced the preserveLogFileNameExtension?
Todd ArmstrongThanks for this post. It helped me to sort out a problem with my rolling file appenders where sometimes the naming would work correctly and sometimes the file would be named something like "Application_20140420_.log20140420"
David Compton