【发布时间】:2018-08-28 14:41:46
【问题描述】:
我想在 webhost 之前开始记录,因此会记录启动错误。所以我跟着Serilog's recommended init order:1)配置,2)日志,3)网络主机。我没有使用CreateDefaultBuilder()。
所以我的Program.cs 有:
// setup config
var envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional:false, reloadOnChange:true)
.AddJsonFile($"appsettings.{envName}.json", optional:true, reloadOnChange:true)
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
// setup Serilog logging
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration) // <<< uses config from above
.CreateLogger()
// setup webhost
new WebHostBuilder()
.UseConfiguration(configuration) // <<< uses config from above
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseSerilog()
.Build()
.Run();
这可行,但即使我指定了reloadOnChange:true,也未检测到appsettings.json 的更改。
但是,当我使用 ConfigureAppConfiguration() 时,会检测到更改:
new WebHostBuilder()
.ConfigureAppConfiguration((context, config) => {
// .. duplicate config here
})
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseSerilog()
.Build()
.Run();
但这意味着重复和可能无法预料的问题 - 即这是一个 hack。 我该如何解决这个问题?
更新
根据@StephenZeng 的回答,UseConfiguration 在这里帮不了我,所以我想我需要使用ConfigureAppConfiguration。但问题依然存在——如何先初始化配置,然后多次使用而不重新定义?
【问题讨论】:
标签: c# asp.net-core serilog asp.net-core-2.1