log4net
Устранение неполадок Log4Net
Поиск…
Вступление
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() в один из ваших методов запуска. Убедитесь, что вы только вызываете конфигурацию один раз.
Файл-приложение не пишет
Если у вас есть файл-приложение, убедитесь, что вы пишете в том месте, где пользователю разрешено создавать и обновлять файлы. Если регистрация не завершится ошибкой. Вы можете проверить это, если включена внутренняя отладка.