基本上,标题本身有点解释了我要实现的目标,但更详细:
比方说,该布局与以下XML布局类似:
layout =“
现在,当将myCustomProperty1设置为'blah1'却未将myCustomProperty2添加到eventInfo.Properties集合中时,结果条目如下所示:
问题是-可以做些什么(最好在配置文件中),以便从最终呈现的结果中排除myCustomProperty2属性,因此输出如下所示:
这是陷阱-多线程使用同一记录器,因此我不能在运行时简单地更改目标的布局配置,因为它可能会对其余线程产生负面影响
预先感谢您的建议。 -K
答案 0 :(得分:1)
您可以尝试使用When:
<variables>
<variable name="var_myCustomProperty1" value="${when:when=length('${event-properties:item=myCustomProperty1}')>0:Inner= myCustomProperty1="${event-properties:item=myCustomProperty1}"}"/>
<variable name="var_myCustomProperty2" value="${when:when=length('${event-properties:item=myCustomProperty2}')>0:Inner= myCustomProperty2="${event-properties:item=myCustomProperty2}"}"/>
</variables>
<targets>
<target name="test" type="Console" layout="<log level='${level:lowerCase=True}' time='${longdate:universalTime=true}'${var_myCustomProperty1}${var_myCustomProperty2} />" />
</targets>
NLog 4.6将包含XmlLayout
,这可能会使事情变得简单:
https://github.com/NLog/NLog/pull/2670
如果不需要xml-output(renderEmptyObject="false"
),也可以使用JsonLayout