Как отключить Серилог?

Мы используем Serilog для регистрации элементов в базе данных с помощью службы Windows, и пользователи хотели иметь возможность выполнять запуск вручную, поэтому мы сделали кнопку (на веб-странице), чтобы сделать вызов того же кода (как модуль, а не сам сервис).

Когда мы добавили код для инициализации журнала, чтобы код продолжал добавлять в таблицу журнала базы данных, он также регистрирует весь HTTP-трафик после этого. Итак, после запуска этого кода мы хотим «отключить» Logger, работающий на веб-сервере. Есть ли простой способ сделать это?

Log.Logger = new LoggerConfiguration()
       .WriteTo.MSSqlServer(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString,
                "LOGS")
       .CreateLogger();

person bowlturner    schedule 15.06.2015    source источник
comment
Вы имеете в виду выключить полностью или только для ручного действия?   -  person Nicholas Blumhardt    schedule 16.06.2015
comment
@NicholasBlumhardt полностью выключается, мы включаем его для ручного запуска и хотим выключить после. Сама служба имеет свой собственный логгер.   -  person bowlturner    schedule 16.06.2015


Ответы (2)


Уровни журнала можно изменить во время выполнения с помощью LoggingLevelSwitch:

var ls = new LoggingLevelSwitch();

Log.Logger = new LoggerConfiguration()
   .MinimumLevel.ControlledBy(ls)
   .WriteTo.MSSqlServer(...)
   .CreateLogger();

Логирование изначально будет на уровне Information, вы можете изменить это с помощью переключателя.

Serilog не определяет уровень Off, но вы можете аппроксимировать его с помощью:

ls.MinimumLevel = ((LogEventLevel) 1 + (int) LogEventLevel.Fatal);

...чтобы отключить регистрацию.

person Nicholas Blumhardt    schedule 16.06.2015
comment
Спасибо за этот ответ. Я понимаю, что LoggingLevelSwitch можно использовать в качестве параметра для установки уровня ведения журнала. Но похоже, что для того, чтобы изменить уровень ведения журнала, нужно было бы повторно развернуть приложение, чтобы изменить LoggingLevelSwitch. Есть ли способ изменить уровень ведения журнала, не требуя новой сборки и развертывания? Возможно, через файл конфигурации или файл appSettings? - person Kamau Malone; 28.02.2017

Этому вопросу пару лет, но я столкнулся с похожей проблемой прямо сейчас.

Самый простой способ отключить ведение журнала Serilog — создать новый регистратор без каких-либо приемников. Из документации Serilog, Основы настройки:

Log.Logger = new LoggerConfiguration().CreateLogger();
Log.Information("No one listens to me!");

Изменить (05.08.2017)

Решение выше неверно. После дополнительных исследований я обнаружил, что это можно сделать, установив фильтр при настройке регистратора:

Log.Logger = new LoggerConfiguration()
    .Filter.ByExcluding(_ => !IsLoggingEnabled)
    .WriteTo.MSSqlServer(...)
    .CreateLogger();

, где IsLoggingEnabled — это просто логический флаг.

person rucamzu    schedule 02.05.2017