#region Copyright & License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you 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 { /// /// An evaluator that triggers after specified number of seconds. /// /// /// /// This evaluator will trigger if the specified time period /// has passed since last check. /// /// /// Robert Sevcik public class TimeEvaluator : ITriggeringEventEvaluator { /// /// The time threshold for triggering in seconds. Zero means it won't trigger at all. /// private int m_interval; /// /// The UTC time of last check. This gets updated when the object is created and when the evaluator triggers. /// private DateTime m_lastTimeUtc; /// /// The default time threshold for triggering in seconds. Zero means it won't trigger at all. /// const int DEFAULT_INTERVAL = 0; /// /// Create a new evaluator using the time threshold in seconds. /// /// /// /// Create a new evaluator using the time threshold in seconds. /// /// /// This evaluator will trigger if the specified time period /// has passed since last check. /// /// public TimeEvaluator() : this(DEFAULT_INTERVAL) { } /// /// Create a new evaluator using the specified time threshold in seconds. /// /// /// The time threshold in seconds to trigger after. /// Zero means it won't trigger at all. /// /// /// /// Create a new evaluator using the specified time threshold in seconds. /// /// /// This evaluator will trigger if the specified time period /// has passed since last check. /// /// public TimeEvaluator(int interval) { m_interval = interval; m_lastTimeUtc = DateTime.UtcNow; } /// /// The time threshold in seconds to trigger after /// /// /// The time threshold in seconds to trigger after. /// Zero means it won't trigger at all. /// /// /// /// This evaluator will trigger if the specified time period /// has passed since last check. /// /// public int Interval { get { return m_interval; } set { m_interval = value; } } /// /// Is this the triggering event? /// /// The event to check /// This method returns true, if the specified time period /// has passed since last check.. /// Otherwise it returns false /// /// /// This evaluator will trigger if the specified time period /// has passed since last check. /// /// 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.UtcNow.Subtract(m_lastTimeUtc); if (passed.TotalSeconds > m_interval) { m_lastTimeUtc = DateTime.UtcNow; return true; } else { return false; } } } } }