You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by rg...@apache.org on 2006/04/29 19:27:29 UTC

svn commit: r398209 - /logging/log4net/trunk/src/Appender/RollingFileAppender.cs

Author: rgrabowski
Date: Sat Apr 29 10:27:28 2006
New Revision: 398209

URL: http://svn.apache.org/viewcvs?rev=398209&view=rev
Log:
Fix for LOG4NET-59 to allow rolling files based on UTC time. Implemented by adding DateTimeStrategy property which accepts an IDateTime. RollingFileAppender contains two IDateTime inner-class implementations: LocalDateTime (DateTime.Now) and UniversalDateTime (DateTime.UtcNow).

Modified:
    logging/log4net/trunk/src/Appender/RollingFileAppender.cs

Modified: logging/log4net/trunk/src/Appender/RollingFileAppender.cs
URL: http://svn.apache.org/viewcvs/logging/log4net/trunk/src/Appender/RollingFileAppender.cs?rev=398209&r1=398208&r2=398209&view=diff
==============================================================================
--- logging/log4net/trunk/src/Appender/RollingFileAppender.cs (original)
+++ logging/log4net/trunk/src/Appender/RollingFileAppender.cs Sat Apr 29 10:27:28 2006
@@ -232,7 +232,6 @@
 		/// </remarks>
 		public RollingFileAppender() 
 		{
-			m_dateTime = new DefaultDateTime();
 		}
 
 		#endregion Public Instance Constructors
@@ -240,6 +239,33 @@
 		#region Public Instance Properties
 
 		/// <summary>
+		/// Gets or sets the strategy for determining the current date and time. The default
+		/// implementation is to use LocalDateTime which internally calls through to DateTime.Now. 
+		/// DateTime.UtcNow may be used by specifying
+		/// <see cref="RollingFileAppender.UniversalDateTime"/>.
+		/// </summary>
+		/// <value>
+		/// An implementation of the <see cref="RollingFileAppender.IDateTime"/> interface which returns the current date and time.
+		/// </value>
+		/// <remarks>
+		/// <para>
+		/// Gets or sets the <see cref="RollingFileAppender.IDateTime"/> used to return the current date and time.
+		/// </para>
+		/// <para>
+		/// There are two built strategies for determining the current date and time, 
+		/// <see cref="RollingFileAppender.LocalDateTime"/> and <see cref="RollingFileAppender.UniversalDateTime"/>.
+		/// </para>
+		/// <para>
+		/// The default strategy is <see cref="RollingFileAppender.LocalDateTime"/>.
+		/// </para>
+		/// </remarks>
+		public IDateTime DateTimeStrategy
+		{
+			get { return m_dateTime; }
+			set { m_dateTime = value; }
+		}
+
+		/// <summary>
 		/// Gets or sets the date pattern to be used for generating file names
 		/// when rolling over on date.
 		/// </summary>
@@ -950,6 +976,11 @@
 		/// </remarks>
 		override public void ActivateOptions() 
 		{
+			if (m_dateTime == null)
+			{
+				m_dateTime = new LocalDateTime();
+			}
+
 			if (m_rollDate && m_datePattern != null) 
 			{
 				m_now = m_dateTime.Now;
@@ -1410,7 +1441,8 @@
 
 		/// <summary>
 		/// This object supplies the current date/time.  Allows test code to plug in
-		/// a method to control this class when testing date/time based rolling.
+		/// a method to control this class when testing date/time based rolling. The default
+		/// implementation uses the underlying value of DateTime.Now.
 		/// </summary>
 		private IDateTime m_dateTime = null;
 
@@ -1525,7 +1557,7 @@
 		/// <summary>
 		/// Default implementation of <see cref="IDateTime"/> that returns the current time.
 		/// </summary>
-		private class DefaultDateTime : IDateTime
+		private class LocalDateTime : IDateTime
 		{
 			/// <summary>
 			/// Gets the <b>current</b> time.
@@ -1539,6 +1571,26 @@
 			public DateTime Now
 			{
 				get { return DateTime.Now; }
+			}
+		}
+
+		/// <summary>
+		/// Implementation of <see cref="IDateTime"/> that returns the current time as the coordinated universal time (UTC).
+		/// </summary>
+		private class UniversalDateTime : IDateTime
+		{
+			/// <summary>
+			/// Gets the <b>current</b> time.
+			/// </summary>
+			/// <value>The <b>current</b> time.</value>
+			/// <remarks>
+			/// <para>
+			/// Gets the <b>current</b> time.
+			/// </para>
+			/// </remarks>
+			public DateTime Now
+			{
+				get { return DateTime.UtcNow; }
 			}
 		}