Having a log per day

52,498

Solution 1

You should use RollingFileAppender with rollingStyle Date and datePattern yyyyMMdd (this will roll every day).

Example of configuration:

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="c:/paypal/logs/gateway.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
    </layout>
</appender>

UPDATE: I think a better way is to include the date into file name. And use datePattern value only to show when new log file should be created.

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="c:/paypal/logs/gateway_%date{yyyyMMdd}.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
  </layout>
</appender>

In this case all your files will have name like gateway_20120427.log.

Solution 2

Like using the RollingFileAppender

<appender name="RollingLogFileAppenderOutput" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="c:\my.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd'.log'" />
    <layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date [%thread] %-5level - %message%newline" />
    </layout>
</appender>

edit

This is the whole log4net configuration section to roll everyday, the same as @lazyberezovsky answered just adding the log4net and root for clarification

edit2 <file value="c:/paypal/logs/gateway_" /> this will create a file named 'gateway_' and at the end of the day (2012-04-27) it will be renamed as gateway_20120427.log and the next day (2012-04-28) it will create again the file gateway_ and at the end it'll create gateway_20120428.log.

<log4net> 
    <appender name="RollingLogFileAppenderOutput" type="log4net.Appender.RollingFileAppender">
        <file value="c:/paypal/logs/gateway_" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="yyyyMMdd'.log'" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level - %message%newline" />
        </layout>
    </appender>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingLogFileAppenderOutput" />
    </root>
</log4net>

Solution 3

PreserveLogFileName

This setting keeps the extension of the file the same after you roll the log.

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="c:/paypal/logs/gateway.log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="_yyyyMMdd" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
        </layout>
        <preserveLogFileNameExtension value="true" />
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="FileAppender" />
    </root>
</log4net>
Share:
52,498
swade1987
Author by

swade1987

Updated on July 09, 2022

Comments

  • swade1987
    swade1987 almost 2 years

    Currently my application is using log4net to log errors, the web.config for this is as followed:

    <log4net> 
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="c:/paypal/logs/gateway.log" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
            </layout>
        </appender>
        <root>
            <level value="DEBUG" />
            <appender-ref ref="FileAppender" />
        </root>
    </log4net>
    

    However, the problem with this is that everyday the logs always go to gateway.log

    Does anybody know a way to have a different log file per day using log4net?

    Ideally I don't want to have to manually edit the web.config every night using a scheduled task.

  • swade1987
    swade1987 about 12 years
    So to clarify if I want c:/paypal/logs/gateway_20120427.log for example, how EXACTLY do I setup the config?
  • Sergey Berezovskiy
    Sergey Berezovskiy about 12 years
    @swade1987 this configuration will create gateway.log file. When you'll try to write something to log other day, then current gateway.log will be renamed to gateway.log20120427 and new gateway.log file will be created. See stackoverflow.com/questions/1165084/… about changing file name. Btw <datePattern value="dd.MM.yyyy'.log'" /> will work.
  • swade1987
    swade1987 about 12 years
    so using the URL you provided for today the log file would be 27.04.2012.log, correct?
  • Sergey Berezovskiy
    Sergey Berezovskiy about 12 years
    @swade1987 actually RollingFileAppender simply adds to the file name what you describe in datePattern. So, if you want gateway_20120427.log, then you should have file name gateway and datePattern _yyyyMMdd'.log'. Current log file will be without extension.
  • swade1987
    swade1987 about 12 years
    does this need the <root></root> tags too?
  • Sergey Berezovskiy
    Sergey Berezovskiy about 12 years
    @swade1987 if you want all loggers in your application to use this RollingFileAppender, then yes, you should add it to root logger. See configuration settings here logging.apache.org/log4net/release/manual/configuration.html
  • Sergey Berezovskiy
    Sergey Berezovskiy about 12 years
    @swade1987 just replace your appender definition with provided in answer. Root and other staff leave as is.
  • nerijus
    nerijus almost 11 years
    This is why we stopped using log4net. Way too complicated and always nightmare with configs. Its like WCF vs ZeroMQ. Start using NLog. Much clearer and easier.
  • seebiscuit
    seebiscuit over 10 years
    @swade1987 Don't forget to add: <staticLogFileName value="false" />, or your log file name may not change!!
  • Tim Partridge
    Tim Partridge almost 10 years
    <file value="c:/paypal/logs/gateway_%date{yyyyMMdd}.log" /> is fine for the first day, but when the day rolls over the file becomes gateway_yyyyMMdd.logyyyyMMdd. Change to <file value="c:/paypal/logs/gateway_" /> and log files will have the correct format except for the current day
  • kernowcode
    kernowcode about 8 years
    You can use <preserveLogFileNameExtension value="true" />
  • brichins
    brichins almost 7 years
    I ended up combining the answer and several comments to get something that gave correct results and looked reasonable (e.g. the parts of the name where in tags with a related name): <file type="log4net.Util.PatternString" value="MyApp.log" /> <preserveLogFileNameExtension value="true" /> <staticLogFileName value="false" /> <rollingStyle value="Date"/> <datePattern value="_yyyy-MM-dd" /> creates filenames (including current day) like MyApp_2017-05-30.log.
  • srk
    srk over 4 years
    @brichins provides a good solution. Also note that you can change the date pattern to make it easier to test your log4net configuration. For example, I used this date pattern to create a new log file for each minute, for ease of testing: <datePattern value="yyyyMMdd-HHmm" />