2013-06-20 4 views
5

Ich habe einen benutzerdefinierten Layout-Renderer namens Job. Es verfügt über einige Artikel, die sich wie in unserem app.config verwendet:Wie kann man ein bestimmtes Stück in einem NLog-Layoutmuster optional machen?

<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> 

Wenn das Layout Renderer entscheidet, dass es keine spezifischen Daten Job zur Verfügung steht, dann Nachrichten, die die Zeichenfolge [H: S: NS: N:'' K: S:] enthalten anmelden. Ich möchte es ausschließen.

Also habe ich versucht, ${jobLayout} mit ${jobLayout:when=jobName!=’’} zu ersetzen, aber es funktioniert nicht, weil NLog denkt, dass jobLayout zu einem Layout-Renderer entsprechen sollte, sondern als eine Variable, die hier der Fall ist. Wie kann ich mein Layout ändern, so dass ${jobLayout} nur enthalten ist, wenn ${jobName} nicht leer ist?

Antwort

3

Ich stieß auf ein ähnliches Problem, wo ich einige spezielle Formatierung anzeigen wollte, wenn eine Variable nicht leer war.

Ich nahm Inspiration von Most useful NLog configurations

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

Ich bin mir nicht sicher, ob dies wird Ihnen 100% gibt, aber es ist ein Schritt in die richtige Richtung.

Verwandte Themen