Когда log4net записывает или фиксирует журнал в файл? - PullRequest
16 голосов
/ 16 марта 2010

Мы используем log4net для регистрации событий и ошибок приложения winform. Наш клиент хочет проверить файл журнала во время работы приложения. Но я не могу узнать, когда и как log4net выполняет операцию записи (фиксации). И как удовлетворить требования заказчика, кроме как самостоятельно создать еще один регистратор. Любая помощь? Спасибо.

Ответы [ 4 ]

9 голосов
/ 16 марта 2010

Если вы используете FileAppender, этот аппендер наследует TextWriterAppender, что, в свою очередь, предоставляет свойство ImmediateFlush. Значение этого свойства по умолчанию равно true и вынуждает appender делать Flush() в базовом потоке для каждой операции Append.

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

1 голос
/ 04 февраля 2011

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

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

0 голосов
/ 29 мая 2012

см. этот ТАК о том, как программно очистить журнал log4net. Ответ Джо, хотя и немного неточный, примерно такой же код, и, вероятно, будет работать для сброса всех буферизованных приложений.

0 голосов
/ 16 марта 2010

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

Вы можете сделать это с помощью кода, подобного следующему:

foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
{
    BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton;
    if (b != null) b.Flush();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...