如何将 nlog.config 中的检测密钥外部化?

Posted

技术标签:

【中文标题】如何将 nlog.config 中的检测密钥外部化?【英文标题】:How to externalize the instrumentation key in nlog.config? 【发布时间】:2021-12-18 21:42:24 【问题描述】:

我在我的 .net 核心 webapi 项目中使用 Nlog。我将应用程序洞察力检测密钥保存在 azure key Vault 中。但是有没有办法可以从 nlog.config 文件中的密钥库中获取检测密钥?谢谢!

<target xsi:type="ApplicationInsightsTarget" name="target">
  <instrumentationKey>123</instrumentationKey>
  <contextproperty name="threadid" layout="$threadid" />
</target>

【问题讨论】:

您可以注册返回 key-vault-value 的自定义布局渲染器:github.com/NLog/NLog/wiki/… 或者您可以使用 NLog.GlobalDiagnosticsContext 和 $gdc 【参考方案1】:

谢谢Rolf Kristensen 和ig-sinicyn。发布您的建议作为帮助其他社区成员的答案。

NLog 通过layouts 属性支持动态值。

// Nlog.config
        <target type="ApplicationInsightsTarget" name="aiTarget" instrumentationKey="$gdc:item=AppInsightsInstrumentationKey" />

// code
NLog.GlobalDiagnosticsContext.Set(
        "AppInsightsInstrumentationKey",
        instrumentationKeyFromKeyVault);

ApplicationInsightsTarget 目标传递其instrumentationKey 属性,因此不会扩展AppInsightsInstrumentationKey 值。您可以将Render() 用于 InstrumentationKey 属性。

您可以参考Add layout support for the ApplicationInsightsTarget target、NLog ApplicationInsightsTarget - Add support for using GDC for InstrumentationKey、pass configuration options to the layout render和Gdc layout renderer

【讨论】:

以上是关于如何将 nlog.config 中的检测密钥外部化?的主要内容,如果未能解决你的问题,请参考以下文章

如何在nlog.config中设置debugEnabled / InfoEnabled

Nlog.config - 只读

使用 InstallNlogConfig 将 Nlog Config 安装到 Eventlog 中

Nlog - Web.config 规则 - 仅用于 Global.asax 文件的日志文件?

C# 使用NLog记录日志

解析 nlog.config 时出现 NLog 异常 - 找不到目标:'EventLog'