Поиск…


Вступление

Log4net - это система регистрации сбоев. Fail stop означает, что он перестает регистрироваться во внутреннем исключении и по дизайну не взаимодействует с потоком программы. Знание этого объясняет, что устранение неполадок log4net не так просто. Если запись не удалась, ваша программа не замечает. Вы видите много вопросов о том, почему мой журнал log4net не работает? В этой статье описываются основные способы устранения неполадок и наиболее распространенные решения.

В большинстве случаев первым шагом является включение внутренней отладки для log4net.

Включить внутреннюю отладку

Есть два способа включения внутренней отладки в log4net:

  • Укажите параметр log4net.Internal.Debug в файле конфигурации приложения
  • Включить внутреннюю отладку log4net программно

Укажите параметр log4net.Internal.Debug в файле конфигурации приложения

Это предпочтительный метод включения внутренней отладки, добавьте ключ log4net.Internal.Debug в файл app.config вашего приложения.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

Ведение журнала отладки начнется сразу же после запуска приложения.

Включить внутреннюю отладку log4net программно

Второй способ - сделать это программно. Установите для свойства log4net.Util.LogLog.InternalDebugging значение true:

log4net.Util.LogLog.InternalDebugging = true;

Внутренний вывод журнала отладки

Внутренние сообщения отладки записываются на консоль и в System.Diagnostics.Trace. Когда вам нужно отключить вывод, вы можете перенаправить System.Console.Out. Или вы можете перенаправить сообщение трассировки в файл:

<configuration>
...

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

...
</configuration>

Буферизированные приставки

Некоторые из приложений log4net являются буферизированными добавками. Эти приставки регистрируются только при регистрации определенного количества сообщений. Некоторые образцы - это SmtpAppender, RemotingAppender или AdoNetAppender. У этих добавлений есть настройка BufferSize:

<bufferSize value="100" />

Это означает, что журнал регистрируется, когда в буфере есть 100 сообщений. Когда вы хотите протестировать приложение, вы можете установить bufferSize в 1.

Если вы хотите сбросить буфер при ошибке, вы можете использовать оценщика:

<evaluator type="log4net.Core.LevelEvaluator">
     <threshold value="ERROR"/>
</evaluator>

Если условие оценщика выполнено, буфер будет сброшен.

Настроить () не вызывается или вызывается несколько раз

Если вы не видите каких-либо протоколов, вы можете проверить, вызвана ли Configure() в вашем приложении. Самый простой способ - добавить его в качестве атрибута для сборки:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Тогда вам не нужно добавлять log4net.Config.XmlConfigurator.Configure() любом месте вашей конфигурации. Или вы можете добавить log4net.Config.XmlConfigurator.Configure() в один из ваших методов запуска. Убедитесь, что вы только вызываете конфигурацию один раз.

Файл-приложение не пишет

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow