我有一个扩展方法用于配置我的日志记录器:
public static class Extensions
{
public static IWebHostBuilder UseLogging(this IWebHostBuilder webHostBuilder) =>
webHostBuilder.UseSerilog((context, loggerConfiguration) =>
{
var logLevel = context.Configuration.GetValue<string>("Serilog:MinimumLevel");
if (!Enum.TryParse<LogEventLevel>(logLevel, true, out var level))
{
level = LogEventLevel.Information;
}
loggerConfiguration.Enrich
.FromLogContext()
.MinimumLevel.Is(level);
loggerConfiguration
.ReadFrom.Configuration(context.Configuration)
.WriteTo.Console(
theme: AnsiConsoleTheme.Code,
outputTemplate: "[{Timestamp:yy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}");
});
}
我添加了这一行.ReadFrom.Configuration(context.Configuration)
,期望从appsettings.json中获取的所有设置都会覆盖当前配置。也就是说,如果我在appsettings.json中指定了另一个输出模板,则它将覆盖现有的输出模板。
"Serilog": {
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
}
}
]
}
但它不起作用。现在,日志消息重复了,一个是来自代码的格式化,另一个是来自配置的。我如何在运行时覆盖appsettings.json中的某些设置?
[03:59:09 INF] 事件处理器服务正在启动。
[19-04-19 00:59:09 INF] 事件处理器服务正在启动。
我有一个扩展方法,我在服务中使用它,但有时我需要覆盖appsettings.json(或环境变量)中的某些设置,我该如何做到这一点?因为目前的解决方案无法正常工作且会添加第二个记录器。