从应用程序服务更改 NLOG 最低级别?不会导致重启

问题描述 投票:0回答:1

简而言之,是否可以更改 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 小时才会同步,除非触发重新启动,这是我们不希望的

c# azure azure-web-app-service nlog
1个回答
0
投票

只是想在应用程序服务配置设置中从 Keyvault 中提取值,这不会导致应用程序重新设置,

  • 是的,您想尝试的方法是正确的。

  • 您可以将配置日志级别/值存储在 KeyVault 机密中。

  • 从那里,您可以使用 KeyVault 参考在应用服务中引用这些机密。

@Microsoft.KeyVault(SecretUri=https://kvharshu3may.vault.azure.net/secrets/SampleSecret/)

enter image description here

据我所知,检索最新的 KeyVault 或现有机密不会有延迟。

  • 是的,您分享的在应用服务中设置 Secrets 的链接是正确的。

Key Vault 在 24 小时之前不会同步,除非触发重新启动

  • Restart
    - 这是应用服务配置设置的实际行为。

enter image description here

  • 但这仅在您想要添加/更新任何设置时才会发生。

  • 每当您更新/添加任何

    Application/Connection String
    时,应用程序服务都会在每次保存时重新启动。

  • 要在不重新启动的情况下从 Key Vault 获取最新值,您不必每次都更新。

  • 您只需使用 SecretName 设置 Key Vault 引用(不包括 Secret URI ID)。

  • 在这种情况下不需要以下选项。

enter image description here

  • 无需每次更新应用程序设置值即可获取最新更改。

请参阅此 SOThread,其中解释了如何从应用程序设置配置中检索 KeyVault 机密。

另一种替代方法:

  • 您可以使用

    App Service
     直接在应用程序中检索机密,而不是将配置存储在 Environment variables
     => 
    DefaultAzureCredential
    中。

  • 这不需要重新启动应用服务。

  • 它直接从 Key Vault 获取最新的可用机密。

© www.soinside.com 2019 - 2024. All rights reserved.