Uploaded image for project: 'Log4net'
  1. Log4net
  2. LOG4NET-283

OnlyOnceErrorHandler is not subclass-friendly

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.2.10
    • 1.2.12
    • Core
    • None
    • Windows 7, IIS 7, .Net 3.5, C#

    Description

      If you ever try to use the ErrorHandler attribute with a custom error handler, it won't write out the messages. For example:

      <appender name="Database_Appender" type="log4net.Appender.AdoNetAppender">
      <errorHandler type="CHO.Next.Global.LogWriterErrorHandler, CHO.Next.Global" />

      Where the class is defined as:

      public class LogWriterErrorHandler : OnlyOnceErrorHandler
      {

      public new void Error(string message)

      { Error(message, null); }

      public new void Error(string message, Exception e)

      { Error(message, e, ErrorCode.GenericFailure); }

      public new void Error(string message, Exception e, ErrorCode errorCode)

      { // write to a file here }

      }

      This was specified as a fix on a few posts like this http://www.mail-archive.com/log4net-user@logging.apache.org/msg04378.html and there hasn't been anything to correct it.

      The reason this won't work is that Error is not virtual. Although the LogWriterErrorHandler is instantiated and the constructor is called, when the appender makes a call to this.ErrorHandler.Error, it calls the base class of OnlyOnceErrorHandler and not LogWriterErrorHandler.

      I would recommend you make the Error methods in AppenderSkeleton virtual so that they can be overriden. Otherwise, what is the value of even having the ErrorHandler attribute available on the appender?

      Attachments

        Activity

          People

            Unassigned Unassigned
            randar Randar Puust
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: