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>