简而言之,是否可以更改 NLog 的最小级别,而不会导致应用程序在 azure 上重新启动,因为推送代码更改将重新启动应用程序,而更改 azure 应用程序配置中的值将导致重新启动。我们不想重新启动应用程序
.Net 4.8 C# API,目前使用 NLog 将其日志写入我们的数据库,这一切都正常。
但是,我现在已设置日志级别以从 web.config 中提取值。 (我得到了一些帮助:NLog 配置文件 - 从 WebConfig/应用程序服务配置中提取值)
使用:
https://github.com/NLog/NLog/wiki/AppSetting-Layout-Renderer
这一切都正常,所以我在 web.config 中有一个值
<add key="NLog_Record" value="Info" />
然后在 NLog 中我说:
<rules>
<logger name="Log" minlevel="${appsetting:name=NLog_Record:default=None}" writeTo="DatabaseName" />
</rules>
按照上面的操作只会记录信息消息,这一切都很好。
但是我已将更改推送到应用程序服务。并从那里进行测试,将
NLog_Record
添加到应用程序服务配置,记录开发应用程序服务的信息和 QA 应用程序服务的错误,这一切都很好。
但是,我的问题是,当我更改应用程序服务配置上的 NLog_Record 值时,例如“错误”而不是“信息”并保存,这会重新启动应用程序服务。
我不想重启应用服务。
我一直在寻找解决办法,但很挣扎,有人有什么想法吗?感谢您的回复。
更新 只是有一个想法从应用程序服务配置设置中的 Keyvault 中提取值,这不会导致应用程序重新设置,但 Key Vault 中的值要到 24 小时才会同步,除非触发重新启动,这是我们不希望的
只是想在应用程序服务配置设置中从 Keyvault 中提取值,这不会导致应用程序重新设置,
是的,您想尝试的方法是正确的。
您可以将配置日志级别/值存储在 KeyVault 机密中。
从那里,您可以使用 KeyVault 参考在应用服务中引用这些机密。
@Microsoft.KeyVault(SecretUri=https://kvharshu3may.vault.azure.net/secrets/SampleSecret/)
据我所知,检索最新的 KeyVault 或现有机密不会有延迟。
Key Vault 在 24 小时之前不会同步,除非触发重新启动
Restart
- 这是应用服务配置设置的实际行为。但这仅在您想要添加/更新任何设置时才会发生。
每当您更新/添加任何
Application/Connection String
时,应用程序服务都会在每次保存时重新启动。
要在不重新启动的情况下从 Key Vault 获取最新值,您不必每次都更新。
您只需使用 SecretName 设置 Key Vault 引用(不包括 Secret URI ID)。
在这种情况下不需要以下选项。
请参阅此 SOThread,其中解释了如何从应用程序设置配置中检索 KeyVault 机密。
另一种替代方法:
您可以使用
App Service
直接在应用程序中检索机密,而不是将配置存储在 Environment variables
=>
DefaultAzureCredential
中。
这不需要重新启动应用服务。
它直接从 Key Vault 获取最新的可用机密。