6

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}

4

2 に答える 2

5

変数が空でないときに特別なフォーマットを表示したいという同様の問題に遭遇しました。

最も有用な NLog 構成からインスピレーションを得ました

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

これで 100% 達成できるかどうかはわかりませんが、正しい方向への一歩です。

于 2014-11-18T01:08:29.250 に答える
2

whenEmpty レイアウト レンダラーを試しましたか? https://github.com/nlog/NLog/wiki/WhenEmpty-Layout-Renderer

于 2014-09-02T14:44:52.383 に答える