logging-log4net-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Karel Kral <kral.k...@volny.cz>
Subject Re: Question on Date/Time based rolling
Date Thu, 14 Dec 2006 07:56:34 GMT
Thanks! Your appender saves my work, which I had to do...
___________________________________________________
Karel Kral, vyvojar
ANETE, s.r.o.
Prostredi: VB.NET, VS2005, XP Pro/P4 3GHz, 2GB RAM
___________________________________________________

On 13.12.2006 10:38, Geert Verbakel wrote:
> We had the same requirement and created our own derived appender.
> It has some limitations (restriction on the date format), but seems to
> be working fine for the rest.
>  
> Please give your comments if you think something could be ameliorated...
>  
> Regards,
> Geert
>  
>  
> 
> #region imports
> 
>  
> 
> using System;
> 
> using System.IO;
> 
> using log4net.Core;
> 
>  
> 
> #endregion
> 
>  
> 
> namespace Utils.Logging
> 
> {
> 
>     #region summary & change history
> 
>  
> 
>     /// <summary>
> 
>     /// Updated RollingFileAppender that removes log files that are
> older than a defined number of days.
> 
>     /// </summary>
> 
>     /// <remarks>
> 
>     /// Only works with date pattern that starts with yy or .yy
> 
>     /// </remarks>
> 
>    
> 
>     #endregion
> 
>  
> 
>     public class RollingFileAppender : log4net.Appender.RollingFileAppender
> 
>     {
> 
>         #region private fields
> 
>        
> 
>         private DateTime lastDeleteTime = DateTime.MinValue;
> 
>         private bool doCheck = false;
> 
>         string fileName = null;
> 
>        
> 
>         #endregion
> 
>        
> 
>         #region constructor
> 
>        
> 
>         /// <summary>
> 
>         /// Initializes a new instance of the <see
> cref="RollingFileAppender"/> class.
> 
>         /// </summary>
> 
>         public RollingFileAppender()
> 
>         {
> 
>         }
> 
>        
> 
>         #endregion
> 
>        
> 
>         #region methods
> 
>        
> 
>         /// <summary>
> 
>         /// Activates the options.
> 
>         /// </summary>
> 
>         public override void ActivateOptions()
> 
>         {
> 
>             base.ActivateOptions ();
> 
>                         
> 
>             fileName = null;
> 
>             if (DatePattern.StartsWith("yy"))
> 
>             {
> 
>                 fileName = File +
> DateTime.Now.ToString("yyyy").Substring(0, 1);
> 
>             }
> 
>             else if (DatePattern.StartsWith(@"\.yy"))
> 
>             {
> 
>                 fileName = File +
> DateTime.Now.ToString(".yyyy").Substring(0, 2);
> 
>             }
> 
>                
> 
>             doCheck = fileName != null
> 
>                 && MaxSizeRollBackups > 0
> 
>                 && (RollingStyle == RollingMode.Date
> 
>                 || RollingStyle == RollingMode.Composite);
> 
>         }
> 
>  
> 
>        
> 
>         /// <summary>
> 
>         /// Handles append time behaviour for CompositeRollingAppender. 
> This checks
> 
>         /// if a roll over either by date (checked first) or time
> (checked second)
> 
>         /// is need and then appends to the file last.
> 
>         /// </summary>
> 
>         /// <param name="loggingEvent"></param>
> 
>         override protected void Append(LoggingEvent loggingEvent)
> 
>         {
> 
>             base.Append(loggingEvent);
> 
>  
> 
>             DeleteTime();
> 
>         }
> 
>  
> 
>         /// <summary>
> 
>         /// Deletes the rolling time files older than a defined number
> of days.
> 
>         /// </summary>
> 
>         private void DeleteTime()
> 
>         {
> 
>             if (doCheck &&
> 
>                 DateTime.Now.Subtract(lastDeleteTime).TotalHours >= 1)
> 
>             {
> 
>                 lastDeleteTime = DateTime.Now;
> 
>                     
> 
>                 try
> 
>                 {
> 
>                     string[] files =
> Directory.GetFiles(Path.GetDirectoryName(File));
> 
>                      foreach (string file in files)
> 
>                      {
> 
>                          if (file.StartsWith(fileName))
> 
>                          {
> 
>                              FileInfo info = new FileInfo(file);
> 
>                              if
> (DateTime.Now.Subtract(info.LastWriteTime).TotalDays > MaxSizeRollBackups)
> 
>                              {
> 
>                                  DeleteFile(file);
> 
>                              }
> 
>                          }
> 
>                      }              
> 
>                 }
> 
>                 catch (Exception ex)
> 
>                 {
> 
>                      ErrorHandler.Error("Exception while deleting the
> rolling time files older than a defined number of days.", ex);
> 
>                 }
> 
>             }                        
> 
>         }
> 
>        
> 
>         #endregion
> 
>     }
> 
> }
> 
>  
> 

Mime
View raw message