Details
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?