Если я правильно понимаю вас, вы бы хотели, чтобы log4net сообщал вам, когда приложение не работает. Если мы посмотрим на код регистрации для реализации Logger мы видим, что единственная точка, которая принимает во внимание appenders упущение является внутренний механизм регистрации:
// log4net.Repository.Hierarchy.Logger
public virtual void Log(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception)
{
try
{
if (this.IsEnabledFor(level))
{
this.ForcedLog((callerStackBoundaryDeclaringType != null) ? callerStackBoundaryDeclaringType : Logger.ThisDeclaringType, level, message, exception);
}
}
catch (Exception exception2)
{
LogLog.Error("Log: Exception while logging", exception2);
}
catch
{
LogLog.Error("Log: Exception while logging");
}
}
Конечно, это происходит только тогда, когда Appender бросает исключение. LogLog
компонент затем пересылает сообщение в консоль и трассировка компонентов:
// log4net.Util.LogLog
private static void EmitErrorLine(string message)
{
try
{
Console.Error.WriteLine(message);
Trace.WriteLine(message);
}
catch
{
}
}
Таким образом, путем прослушивания сообщения, приходящие от следа вы можете получить представление о том, что происходит в ваших appenders. Чтобы включить это событие, вы можете добавить прослушиватель трассировки, который запускается в некоторых конкретных случаях: вы можете взглянуть на то, что находится в this answer, относительно пользовательских прослушивателей трассировки, чтобы вызвать событие из одного.
Нет, вам нужно было бы реализовать это самостоятельно с каким-то протоколом биения сердца. Лично я никогда не видел сбой log4net за многие годы его использования - я видел, что он не запускался, и я видел, как он удаляет соединение с базой данных (вот почему [ReconnectOnError] (https://logging.apache.org) /log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html)), но так и не сработает. – stuartd
@stuartd Спасибо за информацию. Я даже не знал о ReconnectOnError. – onefootswill