【发布时间】:2019-05-21 11:01:09
【问题描述】:
我已经设置了我的解决方案,serilog 从 appsettings.json 读取值
public void Configure(IApplicationBuilder application, IHostingEnvironment environment, ILoggerFactory loggerFactory)
{
Logger log = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
loggerFactory.AddSerilog(log);
应用设置如下所示:
"Serilog": {
"Using": [ "Serilog.Sinks.Slack", "Serilog.Sinks.ApplicationInsights" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Error",
"System": "Error"
}
},
"WriteTo": [
{
"Name": "Slack",
"Args": {
"WebHookUrl": "https://hooks.slack.com/services/xxx/yyy/zzz",
"CustomChannel": "#channel"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"InstrumentationKey": "xxx-xxx-xxx-xxx-xxx",
"restrictedToMinimumLevel": "Information",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
}
}
]
}
所以到这里为止一切都很好,但我不想在我的存储库中存储 webhook 和 InstrumentationKey 之类的秘密。我想从安全的地方阅读它们,例如开发环境中的用户机密和生产中的 Key-vault。如何更改它以替换 usersecrets 中的值?
https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows
反正配置会自动被覆盖吗?
如果没有,我知道我可以从秘密中读取我的配置,比如说
webHookUrl = Configuration["Serilog:WriteTo:Slack:WebHookUrl"];
但是我该如何在 loggerConfig 上应用它呢?我的意思是,writeTo 部分从设置中是动态的,然后我应该将它添加到代码中吗? :\
更新
由于很多人都问过,在我的program.cs中我有:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>();
根据 Microsoft 文档,一切正常,因为我有 CreateDefaultBuilder 并且我正在运行 .net core 2.2。
https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows#access-a-secret
在 ASP.NET Core 2.0 或更高版本中,在开发模式下,当项目调用 CreateDefaultBuilder 以使用预配置的默认值初始化主机的新实例时,会自动添加用户机密配置源。当 EnvironmentName 为 Development 时,CreateDefaultBuilder 调用 AddUserSecrets。
当未调用 CreateDefaultBuilder 时,通过在 Startup 构造函数中调用 AddUserSecrets 显式添加用户机密配置源。仅当应用在开发环境中运行时才调用 AddUserSecrets
【问题讨论】:
-
关于 .Net Core 配置的一点是,设置来自哪里并不重要,只要其中一个提供者提取了一个设置,它通常可以用于配置。您可以将 serilog 设置放在任何提供程序中,例如 keyvault 提供程序、环境变量等。如果您在 Azure 应用服务中,我建议使用该服务的应用程序设置。
-
@Crowcoder 感谢您的回复。我已经在我的秘密中复制了完全相同的设置并将其从我的 appsettings 中删除,但现在我没有收到任何日志。我错过了什么吗?
-
如何设置配置生成器?你在用
builder.AddUserSecrets<Startup>();吗? -
@ESG 不,因为我在 .net core 2.2 上,所以我应该可以使用 WebHost.CreateDefaultBuilder(args)。我不应该吗?
-
@AshkanSirous 不,机密仅按需加载(通常仅在开发环境中)
标签: c# asp.net-core serilog asp.net-core-2.2