Serilog не переопределит минимальный уровень для ILogger - PullRequest
0 голосов
/ 30 марта 2020

Я не могу заставить Serilog переопределить настройки минимального уровня для этого класса IHostedService, который у меня есть.

Это моя программа. Ccs

// ...

LoggerConfiguration CreateLogConfig()
{
    var minLevel = Enum.Parse<LogEventLevel>(config["ApplicationLogging:MinimumLevel"]);

    var logger = new LoggerConfiguration()
        .Enrich.FromLogContext()

    // Set up global min level filters.
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .MinimumLevel.Override("System", LogEventLevel.Error)
    .MinimumLevel.Override("StartupCheck", LogEventLevel.Information)
    .MinimumLevel.Is(minLevel)

    // ...

    return logger;
}

// ...

Тогда у меня есть файл называется StartupCheck.cs, который выглядит следующим образом:

public class StartupCheck : IHostedService
{
    private readonly ILogger<StartupCheck> logger;
    //  ...

    public StartupCheck(ILogger<StartupCheck> logger)
    {
        this.logger = logger;
    }

    public async Task StartAsync(CancellationToken cancellationToken)
    {
        logger.LogInformation($"Build Number: { Assembly.GetExecutingAssembly().GetName().Version }");

        // ...
    }

    // ...

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }
}

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

Из Google, я знаю, что это что-то с исходным контекстом, но я не могу понять, что такое автоматически сгенерированный исходный контекст. Я сделал несколько попыток, но безрезультатно. мой пример кода имеет имя класса, но я также пробовал полное пространство имен и часть пространства имен. Я также попытался получить пространство имен с помощью отражения, и это тоже не сработало. Я пытался реализовать ILogger и изменить строку создания регистратора на factory.CreateLogger("StartupCheck");, но это, похоже, ничего не дало.

У меня нет идей.

1 Ответ

2 голосов
/ 31 марта 2020

Аргумент для Override() является квалифицированным для пространства имен, поэтому, если ваш класс MyApp.StartupCheck, вам нужно включить эту полную строку в переопределение, а не только имя класса.

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