Что-то, что вам может пригодиться, - это создать класс, который реализует IErrorHandler для каждого аппендера, а затем настроить каждого аппендера на использование собственного класса обработки ошибок. Это должно дать вам больше контроля, чем включение log4net.Internal.Debug.
Я только что попробовал, и это работает (обратите внимание, что в моем примере Logger
- это log4net logger, определенный в другом месте - цель этого состоит в том, чтобы захватывать ошибки от приложения SMTP и записывать их в файл):
using System;
using log4net.Core;
namespace Test
{
public class SmtpErrorHandler : IErrorHandler
{
public void Error(string message)
{
Logger.Log.Error(message);
}
public void Error(string message, Exception ex)
{
Logger.Log.Error(message, ex);
}
public void Error(string message, Exception ex, ErrorCode errorCode)
{
Logger.Log.Error(String.Format("{0}{1}Error code: {2}", message, Environment.NewLine, errorCode), ex);
}
}
}
Где я настраиваю свой appender (конечно, вы можете сделать это и в конфиге):
emailAppender.ErrorHandler = new SmtpErrorHandler();