Как отключить Serilog?

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

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

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

3 ответа

Решение

Уровни журнала могут быть изменены во время выполнения с 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);

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

в соответствии с документацией Microsoft по ведению журнала, если вы установите для уровня журнала значение Нет, все журналы будут подавлены.

Чтобы подавить все журналы, укажите LogLevel.None. LogLevel.None имеет значение 6, что выше, чем LogLevel.Critical (5).

Журналы ниже минимального уровня не передаются поставщику. Записывается или отображается.

вы можете обратиться к этой документации в разделе «Настройка ведения журнала». ведение журнала для ядра asp.net

Этому вопросу пару лет, но я сталкиваюсь с подобной проблемой прямо сейчас.

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

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

Изменить (08/05/2017)

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

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

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

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