перехват исключений log4net - PullRequest
2 голосов
/ 23 января 2012

Мне нужно отлавливать исключения log4net (свои собственные исключения, а не исключения приложений, зарегистрированные им).Я хотел бы, чтобы есть способ сделать это следующим образом:

Try
    _logger.Info(response)
Catch ex As Exception
    Excepciones.HandleException(ex, "PolicyCore")
End Try

Я реализовал этот код, и нет ошибок при компиляции, но я заставляю log4net иметь ошибку (указывающую на несуществующую базу данных в файле конфигурации) и ничего не выбрасывается.
Я попробовал подход слушателя:

 <appSettings>
        <add key="log4net.Internal.Debug" value="true" />
    </appSettings>
    <system.diagnostics>
       <trace autoflush="true" indentsize="4" >
         <listeners>
           <add name="textWriterTraceListener" 
               type="System.Diagnostics.TextWriterTraceListener"
               initializeData="C:\\temp\\log4net.txt" />
           <remove name="Default" />
         </listeners>
       </trace>
    </system.diagnostics>

, и он записывает ошибки в log4net.txt, принудительные, которые я имею в виду.

Это последнееУ aproach есть пара недостатков: он не добавляет каждую ошибку в файл, если ошибка такая же, он не записывает ее, я не могу заставить слушателя записать каждую ошибку в этот файл, только один (яне знаю, как полностью настроить прослушиватель трассировки, это может быть так).Таким образом, он не будет добавлять дату и час к каждой строке, которая необходима для меня.Наконец, я не могу дать структуру (XML).

Даже если слушатель работает , мне нужно использовать метод try / catch , так как я использую ExceptionHandling из библиотеки Enterprise, чтобы регистрировать ошибки в моем приложении.

Кто-нибудь, кто сталкивался с проблемой и / или имеет решение?

1 Ответ

2 голосов
/ 24 января 2012

Log4net разработан, чтобы не выдавать никаких исключений. Кажется, это хорошая идея, потому что было бы очень плохо, если бы ваше приложение не сработало, потому что оно не может войти. Поэтому, если вам нужно регистрировать определенные сообщения и быть уверенным, что это работает, вам не следует использовать каркас журналов, а реализовывать его как часть своей «бизнес-логики».

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

...