Я установил свое решение, и serilog считывает значения из appsettings.json
public void Configure(IApplicationBuilder application, IHostingEnvironment environment, ILoggerFactory loggerFactory)
{
Logger log = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
loggerFactory.AddSerilog(log);
И appsettings выглядит так:
"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 , чтобы инициализировать новый экземпляр хоста с предварительно настроенными значениями по умолчанию. CreateDefaultBuilder вызывает AddUserSecrets, когда EnvironmentName является разработкой.
Когда CreateDefaultBuilder не вызывается, добавьте источник конфигурации пользовательских секретов явным образом, вызвав AddUserSecrets в конструкторе запуска. Вызывайте AddUserSecrets только тогда, когда приложение работает в среде разработки