Настройка Serilog Log.Logger на уровне сервиса API - PullRequest
0 голосов
/ 01 июля 2019

У меня есть сценарий использования журналирования, когда я хочу регистрировать определенный вызов API на другом уровне, чем все другие службы API, использующие Serilog, Log.Logger.Моя текущая конфигурация регистратора для приложения выглядит примерно так:

Log.Logger = new LoggerConfiguration()
                .MinimumLevel.ControlledBy(_loggingLevelSwitch)
                .WriteTo.MSSqlServer(connectionString, "LogTable")
                .CreateLogger();

Итак, когда я вызываю SetLoggingLevelSwitch для обновления уровня журнала, он обновляет уровень для всего приложения, что и ожидается.Что мне интересно, так это то, что в отдельном вызове API можно переопределить уровень журнала только для объема этого вызова API и не повлиять на уровень журнала в остальной части приложения?

Спасибо!

1 Ответ

0 голосов
/ 01 июля 2019

Я думаю, вы можете использовать любой Контейнер для регистрации общего регистратора, а затем создать из него ILogger

services.AddScoped<LoggerConfiguration>((_) => {
new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.Console();
});

Создать регистратор с

public YourApiController(LoggerConfiguration loggerOrdinaryConfig)
{
    _strangeApiLogger = loggerOrdinaryConfig.
        MinimumLevel.Verbose()
        .CreateLogger();
}

Но это может привести к трудностям при тестировании.

Вот почему вам лучше взглянуть на LogContext (с фильтрацией по свойству) или даже FileConfiguration

upd: всегда пытайтесь использовать интерфейсыиз-за более простых причин модульного тестирования

...