Я не могу заставить 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");
, но это, похоже, ничего не дало.
У меня нет идей.