2015-06-16 3 views
1

Log4net не работает по дизайну. Хорошо. Я не хочу, чтобы это снимало мое приложение.Возможно настроить уведомление Log4net при сбоях?

Есть ли способ настроить уведомление при сбое Log4net и прекращении регистрации?

Есть ли какой-нибудь обработчик событий, с которым я могу подключиться, в котором скажут мне, что Log4net замолчал?

Я хочу знать, когда это произойдет, поэтому я могу как можно скорее утилизировать пул приложений.

Спасибо!

+1

Нет, вам нужно было бы реализовать это самостоятельно с каким-то протоколом биения сердца. Лично я никогда не видел сбой log4net за многие годы его использования - я видел, что он не запускался, и я видел, как он удаляет соединение с базой данных (вот почему [ReconnectOnError] (https://logging.apache.org) /log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html)), но так и не сработает. – stuartd

+0

@stuartd Спасибо за информацию. Я даже не знал о ReconnectOnError. – onefootswill

ответ

2

Если я правильно понимаю вас, вы бы хотели, чтобы 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, относительно пользовательских прослушивателей трассировки, чтобы вызвать событие из одного.

+0

Спасибо за это. Мы видим, что Log4net прекращает ведение журнала с разумной регулярностью. Мы еще не определили, ограничено ли оно приложением ADO. Это должно быть step1, так как мы недавно получили файл append тоже. Ваше предложение подсказки выглядит как хорошая идея, которую мы рассмотрим. Благодарю. – onefootswill

Смежные вопросы