2013-06-20 27 views
5

我有一個名爲作業的自定義佈局渲染器。它提供了幾個項目,用於像這樣在我們的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}

回答

3

我遇到了一個類似的問題,我想在變量不是空的時候顯示一些特殊的格式。

我花了一些靈感來自於Most useful NLog configurations

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

我不知道這將讓你有100%,但它是朝着正確方向邁出的一步。

相關問題