roolan
roolan

Reputation: 81

how to configure static log file name with compositely named roll backups

I used this config but a date is always added to the current file ('log.20130805.0.log').

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs/logFile.log" />
    <appendToFile value="true" />
    <preserveLogFileNameExtension value="true" />
    <rollingStyle value="Composite" />
    <datePattern value=".yyyyMMdd" />
    <maximumFileSize value="10MB" />
    <countDirection value="1"/>
    <maxSizeRollBackups value="-1" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>

The result of that config is :

log.20130805.0.log
log.20130805.1.log
log.20130805.2.log
log.20130805.3.log

What I get with staticLogFileName = true is :

log.log
log.1.log
log.2.log
log.3.log

What I want is :

log.log
log.20130805.1.log
log.20130805.2.log
log.20130805.3.log

Upvotes: 8

Views: 12526

Answers (3)

Michael Glass
Michael Glass

Reputation: 482

I know I'm late to the party, but I believe I have figured out how to use a composite RollingFileAppender properly. I'm posting it here for posterity, in case anyone stumbles upon this in a search:

<appender name="rollingfileappender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Logs\logfile.log" />
    <datePattern value=".yyyyMMdd" />
    <preserveLogFileNameExtension value="true" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100Kb" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.DynamicPatternLayout">
        <conversionPattern value="%[level] - %date - %message" />
    </layout>
</appender>

The key here is:

<preserveLogFileNameExtension value="true" /> and <staticLogFileName value="true" />

When your current log files are being appended, you'll see:

logfile.log
logfile.1.log
logfile.2.log
etc...

Once the new day hits, those should be renamed to:

logfile.20200623.log
logfile.20200623.1.log
logfile.20200623.2.log
etc...

and you'll have a new logfile.log, still catching your current logs.

Upvotes: 8

Luciano
Luciano

Reputation: 2999

Based on these tips I guess it isn't possible, unfortunately (with the current implementation of RollingFileAppender):

http://geekswithblogs.net/rgupta/archive/2009/03/03/tips-on-using-log4net-rollingfileappender.aspx

Upvotes: 0

Faez Mehrabani
Faez Mehrabani

Reputation: 348

You can use the function below. This function first gets the file location that you set in web.config and after that you can add any path that you want! (like Date or Customer or...)

WebConfig:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\\t4\\"/>
      <appendToFile value="true"/>
      <rollingStyle value="Composite"/>
      <datePattern value="_yyyy-MM-dd.lo'g'"/>
      <maxSizeRollBackups value="10"/>
      <maximumFileSize value="1MB"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date User:%identity IP:%X{addr} Browser: %X{browser} Url: %X{url} [%thread] %-5level %c:%m%n"/>
      </layout>
</appender>

Function:

public static void ChangeFileLocation(string _CustomerName,string _Project)
{
    XmlConfigurator.Configure();
    log4net.Repository.Hierarchy.Hierarchy h =(log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();            

    foreach (IAppender a in h.Root.Appenders)
    {
        if (a is FileAppender)
        {
            FileAppender fa = (FileAppender)a;
            string sNowDate=  DateTime.Now.ToLongDateString();
            // Programmatically set this to the desired location here
            string FileLocationinWebConfig = fa.File;
            string logFileLocation = FileLocationinWebConfig + _Project + "\\" + CustomerName + "\\" + sNowDate + ".log";

            fa.File = logFileLocation;
            fa.ActivateOptions();
            break;
        }
    }
}

and result is like this: C:\t4\TestProject\Customer1\Saturday, August 31, 2013.log

Upvotes: 0

Related Questions