Log4net RollingFileAppender Тайм-аут - PullRequest
2 голосов
/ 15 июня 2010

Я подключаюсь к сетевому общему диску, в настоящее время использующему RollingFileAppender.

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

Log4Net просто зависает при попытке получить приложение журнала для файла на этом удаленном сервере.Могу ли я использовать какой-либо тайм-аут?

1 Ответ

2 голосов
/ 15 июня 2011

Нет типа Timeout или аналогичного свойства ни в одном из типов FileAppender. Я посмотрел на source для appender, и он не делает ничего особенного (от файлового appender до каркаса appender есть странный путь к фактическому типу макета сообщения, чтобы увидеть все записи потока).

У меня есть две рекомендации ...

Пользователь на помощь!

Вы можете попробовать написать собственный аппендер, который включает в себя все виды защиты от сети (NetworkFileAppender имеет приятное звучание). Но вы должны действительно рассмотреть дизайн. Предполагается, что приложения в log4net работают синхронно и быстро.

Посмотрите на сообщение, которое я написал о производительности, добавляющей с log4net. Это полно предостережений и недостатков. Обратите особое внимание на ту часть, куда я вернулся и сказал не писать свой собственный асинхронный аппендант :)

Это подводит меня ко второй рекомендации

Общий логинг "Сервис"

Старая запись о асинхронном файле, добавляющем в список рассылки log4net, закончилась этой рекомендацией

Я бы предложил использовать общий буфер с одним рабочим потоком, который регистрирует буфер, как только он достигает определенного размера.

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

BlockingCollection в .NET 4.0 и Библиотека задач могут помочь вам кое-что раскрутить, чтобы изложить идеи.

Вывод (и реальная рекомендация)

Я ставлю под сомнение ваше решение сначала добавить сетевое хранилище файлов. По сути, вы добавляете сетевые вызовы по всему вашему приложению (самый длинный и наименее гарантированный вид вызовов). Это также, вероятно, не стоит усилий для реализации любого из этих «исправлений». Спросите, почему вам нужны файлы в сетевом магазине, и посмотрите, может ли другое решение удовлетворить ваши реальные потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...