我有一個名爲作業的自定義佈局渲染器。它提供了幾個項目,用於像這樣在我們的app.config:如何在NLog佈局模式中使某個部分可選?
<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:when=jobName!=’’}
更換${jobLayout}
,但它不工作,因爲NLOG認爲jobLayout
應該對應一個佈局的渲染器,而不是一個變量,它是這裏的情況。
如何更改我的佈局,以便僅在${jobName}
不爲空時才包含${jobLayout}
?