2009-03-24 4 views
13

Кажется, что Log4Net молча отключается по причинам, которые не очевидны, и я не понимаю, как их устранить. Моя догадка заключается в том, что конкретный appender терпит неудачу в определенном сообщении журнала и, кажется, закрывает весь стек.Как устранить неисправность log4net, когда он прекращает ведение журнала

Есть ли способ заставить Log4Net выбрасывать исключение (по крайней мере, во время фазы отладки), а не завершать работу службы.

ответ

13

Я думаю, что есть конфиг значение, которое можно поместить в раздел AppSettings вашего app.config/web.config, чтобы включить внутренние отладочные в log4net:

<appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
</appSettings> 

Это даст вам некоторое представление о какой-либо ошибки, которые может проглотить log4net.

+5

После небольшого дополнительного копирования (следуя указателю на включение внутренней отладки, он выглядит как включение слушателя для System.Diagnostics.Trace также требуется. –

+3

Следует также отметить, что appSettings необходимо пройти перед системой.атрибут диагностики. – Dan

22

Расширяя предыдущий ответ -

Чтобы добавить прослушиватель трассировки для трассировки log4net.Internal.Debug, добавьте это в ваше приложение конфигурации:

<system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add 
      name="textWriterTraceListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\temp\log4net.txt" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 

Заменить initializeData значение атрибута выше вашего желаемый путь к файлу журнала. Убедитесь, что у приложения или сервера ASP.NET есть разрешение на запись в этот файл.

Другое, что вы можете сделать, это проверить сообщения, которые возвращаются из конфигурации log4net при запуске. Начиная с версии log4net 1.2.11 методы XmlConfigurator.Configure() возвращают ICollection, содержащие проблемы с перечислением строк, возникающие в процессе настройки.

Так что, если у вас есть что-то вроде этого:

XmlConfigurator.Configure(); 

изменить его на

ICollection configMessages = XmlConfigurator.Configure(); 

и проверить configMessages в отладчике, или распечатать их где-нибудь, например,

foreach (string msg in configMessages) 
{ 
    Console.WriteLine(msg); 
} 

Если все остальное терпит неудачу, загрузите исходный код log4net, добавить проект в решение, и ссылки на проект вместо log4net.dll. Теперь вы можете войти в вызовы log4net в отладчике.

0

Мне было сложно узнать, почему файлы журнала и SQL-приложения не работали. Я изменил таблицу SQL по умолчанию, и оказалось, что тип данных Int не был хорошим, а значение Int32 было правильным. Я не мог найти эту информацию до тех пор, пока не отлажу в Visual Studio и не войду в метод ведения журнала. Выполнение методы было приостановлено на моей точке останова, и я побежал команду установки в окне Immediate:

log4net.Config.XmlConfigurator.Configure()

я был в состоянии видеть немедленную обратную связь и было в самом деле, исключение, возникшее при запуске этого кода конфигурации. Он отображается в окне «Немедленное», и я смог решить проблему.

Надеюсь, это поможет кому-то.

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