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 2008/08/24 19:17:25 UTC

svn commit: r688531 - in /logging/log4net/trunk/src: Core/TimeEvaluator.cs log4net.vs2005.csproj

Author: rgrabowski
Date: Sun Aug 24 10:17:25 2008
New Revision: 688531

URL: http://svn.apache.org/viewvc?rev=688531&view=rev
Log:
Fix for LOG4NET-155. Added TimeEvaluator that will trigger a buffer flush if a certain amount of time has elapsed since the last event.

Added:
    logging/log4net/trunk/src/Core/TimeEvaluator.cs
Modified:
    logging/log4net/trunk/src/log4net.vs2005.csproj

Added: logging/log4net/trunk/src/Core/TimeEvaluator.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Core/TimeEvaluator.cs?rev=688531&view=auto
==============================================================================
--- logging/log4net/trunk/src/Core/TimeEvaluator.cs (added)
+++ logging/log4net/trunk/src/Core/TimeEvaluator.cs Sun Aug 24 10:17:25 2008
@@ -0,0 +1,147 @@
+#region Copyright & License
+//
+// Copyright 2001-2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+#endregion
+
+using System;
+
+namespace log4net.Core
+{
+    /// <summary>
+    /// An evaluator that triggers after specified number of seconds.
+    /// </summary>
+    /// <remarks>
+    /// <para>
+    /// This evaluator will trigger if the specified time period 
+    /// <see cref="Interval"/> has passed since last check.
+    /// </para>
+    /// </remarks>
+    /// <author>Robert Sevcik</author>
+    public class TimeEvaluator : ITriggeringEventEvaluator
+    {
+        /// <summary>
+        /// The time threshold for triggering in seconds. Zero means it won't trigger at all.
+        /// </summary>
+        private int m_interval;
+
+        /// <summary>
+        /// The time of last check. This gets updated when the object is created and when the evaluator triggers.
+        /// </summary>
+        private DateTime m_lasttime;
+
+        /// <summary>
+        /// The default time threshold for triggering in seconds. Zero means it won't trigger at all.
+        /// </summary>
+        const int DEFAULT_INTERVAL = 0;
+
+        /// <summary>
+        /// Create a new evaluator using the <see cref="DEFAULT_INTERVAL"/> time threshold in seconds.
+        /// </summary>
+        /// <remarks>
+        /// <para>
+        /// Create a new evaluator using the <see cref="DEFAULT_INTERVAL"/> time threshold in seconds.
+        /// </para>
+        /// <para>
+        /// This evaluator will trigger if the specified time period 
+        /// <see cref="Interval"/> has passed since last check.
+        /// </para>
+        /// </remarks>
+        public TimeEvaluator()
+            : this(DEFAULT_INTERVAL)
+        {
+        }
+
+        /// <summary>
+        /// Create a new evaluator using the specified time threshold in seconds.
+        /// </summary>
+        /// <param name="interval">
+        /// The time threshold in seconds to trigger after.
+        /// Zero means it won't trigger at all.
+        /// </param>
+        /// <remarks>
+        /// <para>
+        /// Create a new evaluator using the specified time threshold in seconds.
+        /// </para>
+        /// <para>
+        /// This evaluator will trigger if the specified time period 
+        /// <see cref="Interval"/> has passed since last check.
+        /// </para>
+        /// </remarks>
+        public TimeEvaluator(int interval)
+        {
+            m_interval = interval;
+            m_lasttime = DateTime.Now;
+        }
+
+        /// <summary>
+        /// The time threshold in seconds to trigger after
+        /// </summary>
+        /// <value>
+        /// The time threshold in seconds to trigger after.
+        /// Zero means it won't trigger at all.
+        /// </value>
+        /// <remarks>
+        /// <para>
+        /// This evaluator will trigger if the specified time period 
+        /// <see cref="Interval"/> has passed since last check.
+        /// </para>
+        /// </remarks>
+        public int Interval
+        {
+            get { return m_interval; }
+            set { m_interval = value; }
+        }
+
+        /// <summary>
+        /// Is this <paramref name="loggingEvent"/> the triggering event?
+        /// </summary>
+        /// <param name="loggingEvent">The event to check</param>
+        /// <returns>This method returns <c>true</c>, if the specified time period 
+        /// <see cref="Interval"/> has passed since last check.. 
+        /// Otherwise it returns <c>false</c></returns>
+        /// <remarks>
+        /// <para>
+        /// This evaluator will trigger if the specified time period 
+        /// <see cref="Interval"/> has passed since last check.
+        /// </para>
+        /// </remarks>
+        public bool IsTriggeringEvent(LoggingEvent loggingEvent)
+        {
+            if (loggingEvent == null)
+            {
+                throw new ArgumentNullException("loggingEvent");
+            }
+
+            // disable the evaluator if threshold is zero
+            if (m_interval == 0) return false;
+
+            lock (this) // avoid triggering multiple times
+            {
+                TimeSpan passed = DateTime.Now.Subtract(m_lasttime);
+
+                if (passed.TotalSeconds > m_interval)
+                {
+                    m_lasttime = DateTime.Now;
+                    return true;
+                }
+                else
+                {
+                    return false;
+                }
+            }
+        }
+    }
+}

Modified: logging/log4net/trunk/src/log4net.vs2005.csproj
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/log4net.vs2005.csproj?rev=688531&r1=688530&r2=688531&view=diff
==============================================================================
--- logging/log4net/trunk/src/log4net.vs2005.csproj (original)
+++ logging/log4net/trunk/src/log4net.vs2005.csproj Sun Aug 24 10:17:25 2008
@@ -281,6 +281,7 @@
     <Compile Include="Core\SecurityContextProvider.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Core\TimeEvaluator.cs" />
     <Compile Include="Core\WrapperMap.cs">
       <SubType>Code</SubType>
     </Compile>