2012-06-20 11 views
1

У меня есть утилита, которая работает весь день для преобразования данных и синхронизации.Log4Net Останавливает ведение журнала

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

Мне нужно настроить способ остановить запуск приложения (в зависимости от настройки приложения) и отправить предупреждающее сообщение, если Log4Net перестает регистрироваться.

У меня есть это для моего Appender:

<log4net> 
<appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 
    <errorHandler type="SomeApp.PresentationLayer.Log4NetErrorHandler" /> 
    <file type="log4net.Util.PatternString" value="H:\SomeApp-%property{RegNo}-log.txt" /> 
    <appendToFile value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <header value="[START]" /> 
    <footer value="[END]" /> 
    <conversionPattern value="%date %-5level - %message%newline" /> 
    </layout> 
</appender> 
<!-- Setup the root category, add the appenders and set the default level --> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="LogFileAppender" /> 
    <!-- <appender-ref ref="A" /> --> 
</root> 

А вот мой обработчик ошибок:

namespace SomeApp.PresentationLayer 
{ 
class Log4NetErrorHandler : IErrorHandler 
{ 

    public bool HandleError(Exception ex) 
    { 
     //Trace.TraceError(ex.ToString()); 
     ExceptionUtil.GetAndLogMessage(ex, "Log4Net Error in SomeApp", false, true); 

     return false; 
    } 

    public void ProvideFault(Exception error, MessageVersion version, ref Message fault) 
    { 
     // Shield the unknown exception 
     FaultException faultException = new FaultException(
      "Server error encountered. All details have been logged."); 
     MessageFault messageFault = faultException.CreateMessageFault(); 

     fault = Message.CreateMessage(version, messageFault, faultException.Action); 
    } 
} 
} 

Независимо от того, что я стараюсь, обработчик исключений не срабатывает. У меня есть файл журнала, установленный для подключенного диска. Пока он регистрируется, я отключу диск, и он никогда не выдает исключение для моего обработчика исключений. Кто-нибудь видит, что мне не хватает?

Я использую C# .NET 3.5 log4net 1.2.10

Спасибо за любую помощь заранее.

ответ

0

На самом деле я не использовал log4net errorHandlers и может быть полностью отключен здесь, но моя интуиция подсказывает мне, что errorHandler предназначен для настройки обработки исключений log4net, а не исключений приложений, и что имеется так мало информации об этом что ложное сообщение в блоге о параметре errorHandler, вероятно, смущает вас. Из документации SDK:

Implements log4net's default error handling policy which consists of emitting a 
message for the first error in an appender and ignoring all subsequent errors. 

Не очень полезно, признаюсь, но, похоже, это не так, как вы думаете. Вы должны правильно обрабатывать исключения приложений в своем приложении и самостоятельно регистрировать сообщение, чтобы увидеть его в журнале.

И есть another question here, что может дать дополнительные подсказки.

+0

Да, это то, что я хочу. Я хочу обрабатывать ошибки в Log4net не в моем приложении. Log4Net славится не сбоями приложений, когда он сталкивается с ошибками. Проблема в том, что мне все еще нужно использовать Log4Net, но я хочу, чтобы ошибки прерывались при регистрации. Режим по умолчанию состоит в том, чтобы полностью отключить ведение журнала. Без каких-либо уведомлений. –

+0

Я просто не могу поверить, что я пропустил решение. Я перепутал log4net.Core.IErrorHandler и .net IErrorHandler. Я должен был понять это из подписей. Спасибо за эту ссылку. –

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