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
        }
 }


Reply via email to