2013-06-20 6 views
5

Ho un renderizzatore di layout personalizzato denominato lavoro. Esso fornisce diversi elementi, che vengono utilizzati come questo nel nostro app.config:Come rendere un determinato pezzo opzionale in un modello di layout 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> 

Quando il renderer di layout decide che non ci sono dati specifici di lavoro disponibili, quindi i messaggi di log contengono la stringa [H: S: NS: N:'' K: S:]. Voglio escluderlo.

Così, ho provato a sostituire ${jobLayout} con ${jobLayout:when=jobName!=’’}, ma non funziona, perché NLog pensa che jobLayout dovrebbe corrispondere a un renderer di layout, piuttosto che una variabile, che è il caso qui.

Come posso modificare il layout in modo che ${jobLayout} sia incluso solo se ${jobName} non è vuoto?

risposta

3

Mi sono imbattuto in un problema simile in cui volevo fare visualizzare una formattazione speciale quando una variabile non era vuota.

ho preso ispirazione da Most useful NLog configurations

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

Non sono sicuro se questo ti porterà al 100% lì, ma è un passo nella giusta direzione.

Problemi correlati