如何在NLog布局模式中选择某个部件?

如何在NLog布局模式中选择某个部件?,nlog,Nlog,我有一个名为job的自定义布局渲染器。它提供了几个项目,这些项目在我们的app.config中使用如下: <variable name="jobHost" value = "${job:item=host}" /> <variable name="jobService" value = "${job:item=service}" /> <variable name="jobNS" value = "${job:item=ns}" /> <variable

我有一个名为job的自定义布局渲染器。它提供了几个项目,这些项目在我们的app.config中使用如下:

<variable name="jobHost" value = "${job:item=host}" />
<variable name="jobService" value = "${job:item=service}" />
<variable name="jobNS" value = "${job:item=ns}" />
<variable name="jobName" value = "${job:item=name}" />
<variable name="jobKind" value = "${job:item=kind}" />
<variable name="jobScheduleId" value = "${job:item=scheduleId}" />
<variable name="jobLayout" value = "[H:${jobHost} S:${jobService} NS:${jobNS} N:'${jobName}' K:${jobKind} S:${jobScheduleId}]" />
<variable name="layout" value = "${longdate} [${threadid}] ${machinename} ${jobLayout} ${uppercase:inner=${level}} ${logger} - ${message} ${onexception:${newline}${exception:format=ToString:innerFormat=ToString:maxInnerExceptionLevel=2}}" />
<targets>
    <target name="ThreadLog" xsi:type="ThreadSpecificTarget" />
    <target xsi:type="SplitGroup" name="AllTargets">
        <target name="TextFile" xsi:type="File" fileName="C:\Log\QuartzBackgroundEngine.txt" layout="${layout}"/>
        <target name="Console" xsi:type="ColoredConsole" layout="${layout}"/>
    </target>
</targets>

当布局呈现程序确定没有作业特定的数据可用时,日志消息将包含字符串
[H:S:NS:N:''K:S::
。我想把它排除在外

因此,我尝试将
${jobLayout}
替换为
${jobLayout:when=jobName!=''}
,但它不起作用,因为NLog认为
jobLayout
应该对应于布局渲染器,而不是变量,这里就是这种情况


如何更改布局,使
${jobLayout}
仅在
${jobName}
不为空时才包含
${jobLayout}

我遇到了一个类似的问题,我想在变量不为空时显示一些特殊的格式

我从中得到了一些灵感

${when:when=length('${jobName}')>0:inner=${jobLayout}

我不确定这是否能让你100%达到目标,但这是朝着正确方向迈出的一步