Nservicebus отключить регистратор по умолчанию в web.config

Я использую DefaultFactory LogManager для Nservicebus v5. Я доволен этим, но надеялся, что смогу отключить через web.config.

Я использую настройки web.config, которые можно найти в справочной документации

<configSections>
    <section name="Logging" type="NServiceBus.Config.Logging, NServiceBus.Core" />
</configSections>
<Logging Threshold="Debug" />

Я бы предпочел не устанавливать порог как смертельный. Я надеялся на "None" или Disabled="true"

Также можно указать путь к каталогу web.config?

Обновление: почему мы хотим игнорировать ошибки?

Суть в том, что у нас нет прав на запись на серверах.

В общем, это не на 100% верно. Наши системы движутся в сторону микросервисов, проблема в том, что децентрализованное ведение журналов - это кошмар трассировки / визуализации. Поэтому мы перенесли отслеживание потоков, исключения и ограниченное отслеживание в централизованную систему.

Точки входа в программирование (так называемые обработчики сообщений, конечные точки веб-API и т. Д.) Почти всегда заключаются в бросок try catch для каждого обработчика, который охватывает все наши ошибки программирования. Это не что-то действительно отличное от нормального. Централизованные локации регистрируют все мигающие красные сигналы тревоги в реальном времени, которые можно пожелать.

В результате остаются только ошибки типа конфигурации, такие как отсутствующие очереди, неправильные привязки сборки, неисправные файлы конфигурации или другие вещи в стиле времени выполнения, такие как разводка IoC (вне кода обработчика). Благодаря централизованному ведению журнала и мониторингу квестов с ошибками довольно легко определить, когда служба не работает, и если это так, мы включаем ведение журнала, перезапускаем, пробуем неисправную проблему и исправляем. Гарантированная доставка позаботится обо всем остальном, как только он снова включится:D Прошли времена 150 миллионов файлов журнала, распределенных по 10 различным серверам.

Простота DefaultFactory была хорошей, так как не требовался другой пакет nuget и связанная с ним конфигурация.

Это правильный путь вперед. Многие утверждают, что нет. Могли бы мы сделать это лучше? Да, мы могли бы реализовать общий интерфейс логгера и передать его в NServiceBus, но мы пока не успокоились и победа не критична.

Примечание: одна очень хорошая вещь в том, как мы регистрируем, - это то, что в нашем инструменте backoffice мы смогли просто показать поток для каждого "заказа", подобно использованию идентификатора корреляции в greylog.

1 ответ

Решение

Поскольку это не считалось вероятным сценарием, у него нет API первого класса. Но вы можете достичь этого, передав нулевой логгер из любой распространенной библиотеки логирования (NLog, Log4net, CommonLogging). Я предполагаю, что вы используете один из них на вашем сайте.

Так что возьмите NLog для примера.

Install-Package NServiceBus.NLog

В вашем webconfig

<appSettings>
  <add key="disableLogging" value="true"/>
</appSettings>

Тогда в вашем глобальном стартапе

    if (ConfigurationManager.AppSettings.Get("disableLogging") == "true")
    {
        LoggingConfiguration config = new LoggingConfiguration();
        LogManager.Configuration = config;
        NServiceBus.Logging.LogManager.Use<NLogFactory>();
    }

Это использует подход, описанный здесь http://docs.particular.net/nservicebus/logging-in-nservicebus

Другие вопросы по тегам