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 2007/12/30 05:55:45 UTC

svn commit: r607517 - /logging/log4net/trunk/src/Util/OnlyOnceErrorHandler.cs

Author: rgrabowski
Date: Sat Dec 29 20:55:44 2007
New Revision: 607517

URL: http://svn.apache.org/viewvc?rev=607517&view=rev
Log:
Fix for LOG4NET-96. Added EnabledDate, ErrorCode, ErrorMessage, and Exception properties to track when an OnlyOnceErrorHandler becomes active. Added Reset method which disables the error handler thus allowing it to become active again.

Modified:
    logging/log4net/trunk/src/Util/OnlyOnceErrorHandler.cs

Modified: logging/log4net/trunk/src/Util/OnlyOnceErrorHandler.cs
URL: http://svn.apache.org/viewvc/logging/log4net/trunk/src/Util/OnlyOnceErrorHandler.cs?rev=607517&r1=607516&r2=607517&view=diff
==============================================================================
--- logging/log4net/trunk/src/Util/OnlyOnceErrorHandler.cs (original)
+++ logging/log4net/trunk/src/Util/OnlyOnceErrorHandler.cs Sat Dec 29 20:55:44 2007
@@ -30,7 +30,7 @@
 	/// </summary>
 	/// <remarks>
 	/// <para>
-	/// The error message is printed on the standard error output stream.
+	/// The error message is processed using the LogLog sub-system.
 	/// </para>
 	/// <para>
 	/// This policy aims at protecting an otherwise working application
@@ -39,11 +39,12 @@
 	/// </remarks>
 	/// <author>Nicko Cadell</author>
 	/// <author>Gert Driesen</author>
+	/// <author>Ron Grabowski</author>
 	public class OnlyOnceErrorHandler : IErrorHandler
-    {
-        #region Public Instance Constructors
+	{
+		#region Public Instance Constructors
 
-        /// <summary>
+		/// <summary>
 		/// Default Constructor
 		/// </summary>
 		/// <remarks>
@@ -73,6 +74,20 @@
 
 		#endregion Public Instance Constructors
 
+		#region Public Instance Methods
+
+		/// <summary>
+		/// Reset the error handler back to its initial disabled state.
+		/// </summary>
+		public void Reset()
+		{
+			m_enabledDate = DateTime.MinValue;
+			m_errorCode = ErrorCode.GenericFailure;
+			m_exception = null;
+			m_message = null;
+			m_firstTime = true;
+		}
+
 		#region Implementation of IErrorHandler
 
 		/// <summary>
@@ -83,15 +98,23 @@
 		/// <param name="errorCode">The internal error code.</param>
 		/// <remarks>
 		/// <para>
-		/// Prints the message and the stack trace of the exception on the standard
-		/// error output stream.
+		/// Sends the error information to <see cref="LogLog"/>'s Error method.
 		/// </para>
 		/// </remarks>
 		public void Error(string message, Exception e, ErrorCode errorCode) 
-		{ 
-			if (IsEnabled) 
+		{
+			if (m_firstTime)
 			{
-				LogLog.Error(declaringType, "[" + m_prefix + "] " + message, e);
+				m_enabledDate = DateTime.Now;
+				m_errorCode = errorCode;
+				m_exception = e;
+				m_message = message;
+				m_firstTime = false;
+
+				if (LogLog.InternalDebugging && !LogLog.QuietMode)
+				{
+					LogLog.Error(declaringType, "[" + m_prefix + "] ErrorCode: " + errorCode.ToString() + ". " + message, e);
+				}
 			}
 		}
 
@@ -107,11 +130,8 @@
 		/// </para>
 		/// </remarks>
 		public void Error(string message, Exception e) 
-		{ 
-			if (IsEnabled) 
-			{
-				LogLog.Error(declaringType, "[" + m_prefix + "] " + message, e);
-			}
+		{
+			Error(message, e, ErrorCode.GenericFailure);
 		}
 
 		/// <summary>
@@ -126,17 +146,16 @@
 		/// </remarks>
 		public void Error(string message) 
 		{
-			if (IsEnabled) 
-			{
-				LogLog.Error(declaringType, "[" + m_prefix + "] " + message);
-			}
+			Error(message, null, ErrorCode.GenericFailure);
 		}
 
 		#endregion Implementation of IErrorHandler
 
-        #region Private Instance Properties
+		#endregion
 
-        /// <summary>
+		#region Public Instance Properties
+
+		/// <summary>
 		/// Is error logging enabled
 		/// </summary>
 		/// <remarks>
@@ -145,43 +164,86 @@
 		/// first error delivered to the <see cref="OnlyOnceErrorHandler"/>.
 		/// </para>
 		/// </remarks>
-		private bool IsEnabled
+		public bool IsEnabled
 		{
-			get
-			{
-				// Allow first error message to be logged
-				if (m_firstTime)
-				{
-					m_firstTime = false;
-					return true;
-				}
+			get { return m_firstTime; }
+		}
 
-				// Check if InternalDebugging is enabled
-				if (LogLog.InternalDebugging && !LogLog.QuietMode)
-				{
-					return true;
-				}
-				return false;
-			}
-        }
+		/// <summary>
+		/// The date the first error that trigged this error handler occured.
+		/// </summary>
+		public DateTime EnabledDate
+		{
+			get { return m_enabledDate; }
+		}
 
-        #endregion
+		/// <summary>
+		/// The message from the first error that trigged this error handler.
+		/// </summary>
+		public string ErrorMessage
+		{
+			get { return m_message; }
+		}
+
+		/// <summary>
+		/// The exception from the first error that trigged this error handler.
+		/// </summary>
+		/// <remarks>
+		/// May be <see langword="null" />.
+		/// </remarks>
+		public Exception Exception
+		{
+			get { return m_exception; }
+		}
+
+		/// <summary>
+		/// The error code from the first error that trigged this error handler.
+		/// </summary>
+		/// <remarks>
+		/// Defaults to <see cref="log4net.Core.ErrorCode.GenericFailure"/>
+		/// </remarks>
+		public ErrorCode ErrorCode
+		{
+			get { return m_errorCode; }
+		}
+
+		#endregion
+
+		#region Private Instance Fields
 
-        #region Private Instance Fields
+		/// <summary>
+		/// The date the error was recorded.
+		/// </summary>
+		private DateTime m_enabledDate;
 
-        /// <summary>
+		/// <summary>
 		/// Flag to indicate if it is the first error
 		/// </summary>
 		private bool m_firstTime = true;
 
 		/// <summary>
+		/// The message recorded during the first error.
+		/// </summary>
+		private string m_message = null;
+
+		/// <summary>
+		/// The exception recorded during the first error.
+		/// </summary>
+		private Exception m_exception = null;
+
+		/// <summary>
+		/// The error code recorded during the first error.
+		/// </summary>
+		private ErrorCode m_errorCode = ErrorCode.GenericFailure;
+
+		/// <summary>
 		/// String to prefix each message with
 		/// </summary>
 		private readonly string m_prefix;
 
 		#endregion Private Instance Fields
 
-	    #region Private Static Fields
+		#region Private Static Fields
 
 	    /// <summary>
 	    /// The fully qualified type of the OnlyOnceErrorHandler class.
@@ -190,8 +252,8 @@
 	    /// Used by the internal logger to record the Type of the
 	    /// log message.
 	    /// </remarks>
-	    private readonly static Type declaringType = typeof(OnlyOnceErrorHandler);
+		private readonly static Type declaringType = typeof(OnlyOnceErrorHandler);
 
-	    #endregion Private Static Fields
+		#endregion
 	}
 }