Есть ли способ переместить переопределения MinimumLevel в appsettings.json?
Иногда я не хочу отображать системные журналы, поэтому я
.MinimumLevel.Override("System", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
и иногда я хочу следить за запросами в целях отладки:
.MinimumLevel.Override("Microsoft.AspNetCore.Hosting", LogEventLevel.Debug)
.MinimumLevel.Override("Microsoft.AspNetCore.Routing.EndpointMiddleware", LogEventLevel.Debug)
Так есть ли лучший способ сделать это в appsettings.json?
public static class LoggingExtensions
{
public static IHostBuilder AddLogging(this IHostBuilder builder, LogEventLevel minLevelLocal = LogEventLevel.Information)
{
const string outputTemplate = "[{Timestamp:HH:mm:ss.fff} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Is(minLevelLocal)
.MinimumLevel.Override("System", LogEventLevel.Error)
.MinimumLevel.Override("Microsoft", LogEventLevel.Error)
// .MinimumLevel.Override("Microsoft.AspNetCore.Hosting", LogEventLevel.Debug)
// .MinimumLevel.Override("Microsoft.AspNetCore.Routing.EndpointMiddleware", LogEventLevel.Debug)
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithProcessName()
.Enrich.WithMemoryUsage()
.WriteTo.Console(outputTemplate: outputTemplate)
.CreateLogger();
return builder.UseSerilog();
}
}





Передайте IConfiguration вашему расширению и извлеките значение таким образом.
public static void AddLogging(IConfiguration configuration)
{
var minLevelString = configuration.GetValue<string>("Logger:MinLevel");
var minLevel = Enum.Parse<LogEventLevel>(minLevelString);
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Is(minLevel).CreateLogger();
}
В документации к библиотеке Serilog.Settings.Configuration есть явная поддержка этого.
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
}
}
И сказать ему прочитать конфиг оттуда:
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();