[ 
https://issues.apache.org/jira/browse/LOG4NET-27?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13554863#comment-13554863
 ] 

Spamme commented on LOG4NET-27:
-------------------------------

Yes, it is expecting that you have exactly 1 log file per each possible 
changing, I know is not a perfect solution. The better approach would be to 
save all the file names in a another file, when you create a new file you add 
it to the list and you pop the old ones and delete them. You have only to find 
an unique name for the history file, for example LoggerName.history.txt. This 
is also an imperfect solution, because if somebody deletes the history file ... 
you can't delete the old files anymore. But at the end there isn't a perfect 
solution, you have always to chose what fits at best your needs. This solution 
is safe against any change in the configuration, if you want you could set the 
history file hidden, so it would be more difficult for a normal user to delete 
it, or you could also open it and lock it, so nobody can change or delete it as 
long as the application is running, but personally I don't like this method.

protected void RollOverTime(bool fileIsOpen)
{
    ...
    //Delete old files
    if (m_maxSizeRollBackups != 0)
    {
        //Opening the history file
        using (FileStream fs = new FileStream(Name + ".history.txt", 
FileMode.OpenOrCreate, FileAccess.ReadWrite))
        {
            try
            {
                //Reading the content of the file and transform it to a list
                var list = new List<string>((new 
StreamReader(fs).ReadToEnd()).Split(new char[] { ';' }, 
StringSplitOptions.RemoveEmptyEntries));

                //Adding the new file name
                list.Add(dateFormat);

                //While the list is longer than the max length
                while (list.Count > m_maxSizeRollBackups)
                {
                    //Getting the first file name in the list
                    var oldFile = CombinePath(File, list[0]);
                    //Deleting the first file name if it exists
                    if (FileExists(oldFile)) DeleteFile(oldFile);
                    //Removing the first file name
                    list.RemoveAt(0);
                }

                //Repositioning the stream to the begin
                fs.Position = 0;
                //Write the new list to the file
                new StreamWriter(fs) { AutoFlush = true 
}.Write(string.Join(";", list));
                //Clearing the rest of the stream
                fs.SetLength(fs.Position);
            }
            //Closing the file
            finally { fs.Close(); }
        }
    }
    ....
}
                
> Rolling files on date/time boundaries doesn't support a maximum number of 
> backup files.
> ---------------------------------------------------------------------------------------
>
>                 Key: LOG4NET-27
>                 URL: https://issues.apache.org/jira/browse/LOG4NET-27
>             Project: Log4net
>          Issue Type: New Feature
>          Components: Appenders
>    Affects Versions: 1.2.11
>            Reporter: Florian Ramillien
>            Priority: Minor
>             Fix For: 1.2 Maintenance Release
>
>         Attachments: LOG4NET-27.patch, RollingFileAppender.cs, 
> RollingFileAppender.cs, RollingFileAppender.cs, RollingFileAppender.cs.patch, 
> RollingFileAppender.patch
>
>
> A maximum of backup files exist when rolling files on file size, but not for 
> rolling on date/time.
> This can be implemented with the same config key : MaxSizeRollBackups

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to