【问题标题】:NLog : How to conditional select target based on env variableNLog:如何根据环境变量有条件地选择目标
【发布时间】:2020-12-15 08:29:22
【问题描述】:

我想在 nlog 中定义 2 个目标(通常是 Devops 上的文件目标和本地 UDP),并根据位置动态选择它们。这样做的动机是在本地运行和在 Devops 上运行时使用不同的目标。

关于如何使用 C# 代码执行此操作的文章有很多,但我想知道是否可以直接在配置文件中执行此操作。

在伪代码中,我正在规则部分中寻找类似的内容:

  <rules>

    if(Env==DEVOPS)
       <logger name="*" minlevel="Info" writeTo="file" />
    else
       <logger name="*" minlevel="Trace" writeTo="udp" />
    end
  
  </rules>

【问题讨论】:

  • 您可以将filters添加到记录器并在里面设置条件,这将检查环境变量。见:stackoverflow.com/a/47517826/2109769
  • 是的!看来我可以按照你的建议达到我需要的结果!

标签: c# nlog


【解决方案1】:

我建议你使用这里描述的方法:

<nlog>
    <variable name="myFileLevel" value="Off" />
    <variable name="myUdpLevel" value="Off" />
    <rules>
      <logger name="*" minLevel="${var:myFileLevel}" writeTo="file" />
      <logger name="*" minLevel="${var:myUdpLevel}" writeTo="udp" />
    </rules>
</nlog>

然后在运行时执行此操作:

if (DevOps)
{
   LogManager.Configuration.Variables["myFileLevel"] = "Debug";
}
else
{
   LogManager.Configuration.Variables["myUdpLevel"] = "Trace";
}
LogManager.ReconfigExistingLoggers();

另请参阅:https://github.com/nlog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多