JSON-config 中的 NLog 默认包装器用法

NLog default wrapper usage in JSON-config

Documentation 说:

Sometimes we require ALL targets to be wrapped in the same way, for example to add buffering and/or retrying. NLog provides <default-wrapper /> syntax for that. You simply put this element in the <targets /> section and all your targets will be automatically wrapped with the specified wrapper.

它还提供了以下示例:

<nlog>  
  <targets>  
    <default-wrapper xsi:type="BufferingWrapper" bufferSize="100"/>  
    <target name="f1" xsi:type="File" fileName="f1.txt"/>  
    <target name="f2" xsi:type="File" fileName="f2.txt"/>  
  </targets>  
  <targets>  
    <default-wrapper xsi:type="AsyncWrapper">  
      <wrapper-target xsi:type="RetryingWrapper"/>  
    </default-wrapper>  
    <target name="n1" xsi:type="Network" address="tcp://localhost:4001"/>  
    <target name="n2" xsi:type="Network" address="tcp://localhost:4002"/>  
    <target name="n3" xsi:type="Network" address="tcp://localhost:4003"/>  
  </targets>  
</nlog>

因此,<default-wrapper /> 元素应该是 <targets> 的子元素,以应用于同一父元素中的每个 <target>

另一方面,Extended Json NLog Config Example 在与 targets 元素相同的级别上使用 default-wrapper

"default-wrapper": {
    "type": "AsyncWrapper",
    "overflowAction": "Block"
},
"targets": {

所以,我有以下问题:

  1. Extended Json NLog Config Example 正确吗?
  2. 来自 targets 元素的所有目标是否都用 default-wrapper 包装,放在 targets 之外?
  3. 如果在同一个配置文件中targets内有default-wrappertargets外有default-wrapper怎么办?

是的,有一些关于 XML-config 和 JSON-config 是否应该完全一对一的讨论。另见:https://github.com/NLog/NLog.Extensions.Logging/pull/283

因为 JSON-config 将目标部分表示为已知目标名称的字典,所以将 default-wrapperdefault-target-parameters 作为保留魔术并不自然-字符串。

  1. 正如您从文档中发现的那样,它们已移出目标部分。
  2. 是的,当使用 default-wrapper 时,目标部分中的所有项目都将被换行。
  3. 尚未测试如果将 default-wrapperdefault-target-parameters 放在目标部分字典中会发生什么。也许检查 NLog InternalLogger 是否抱怨未知配置项。

请注意,正在做更多的工作来为 default-wrapperdefault-target-parameters 取一个更好的名字,因为可能不容易猜到它们都适用于目标部分。另见:https://github.com/NLog/NLog.Extensions.Logging/pull/500