Как устранить неполадки в log4net, когда он перестает вести журнал

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

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


person Ralph Shillington    schedule 24.03.2009    source источник


Ответы (3)


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

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

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

person Andy White    schedule 24.03.2009
comment
Еще немного покопавшись (следуя вашему указателю, чтобы включить внутреннюю отладку, похоже, также требуется включение прослушивателя для System.Diagnostics.Trace. - person Ralph Shillington; 25.03.2009
comment
Также следует отметить, что appSettings должен стоять перед атрибутом system.diagnostics. - person Dan; 10.05.2011

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

Чтобы добавить прослушиватель трассировки для трассировки 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 при запуске. Начиная с версии 1.2.11 log4net, методы XmlConfigurator.Configure () возвращают ICollection, содержащую строки, перечисляющие проблемы, возникшие в процессе настройки.

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

XmlConfigurator.Configure();

измените это на

ICollection configMessages = XmlConfigurator.Configure();

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

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

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

person Eric Pohl    schedule 26.08.2010

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

log4net.Config.XmlConfigurator.Configure ()

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

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

person sondlerd    schedule 31.07.2015