2013-06-20 17 views
5

Tôi có trình kết xuất bố cục tùy chỉnh có tên job. Nó cung cấp một số mặt hàng, được sử dụng như thế này trong app.config của chúng tôi:Làm thế nào để tạo một phần nhất định tùy chọn trong mẫu bố cục 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> 

Khi các renderer bố trí quyết định rằng không có công việc dữ liệu cụ thể có sẵn, sau đó đăng nhập thông điệp chứa chuỗi [H: S: NS: N:'' K: S:]. Tôi muốn loại trừ nó. Vì vậy, tôi đã cố gắng thay thế ${jobLayout} bằng ${jobLayout:when=jobName!=’’}, nhưng nó không hoạt động, bởi vì NLog nghĩ rằng jobLayout phải tương ứng với trình kết xuất bố cục, thay vì một biến, đó là trường hợp ở đây.

Tôi làm cách nào để thay đổi bố cục để ${jobLayout} chỉ được bao gồm nếu ${jobName} không trống?

Trả lời

3

Tôi gặp sự cố tương tự nơi tôi muốn thực hiện để hiển thị một số định dạng đặc biệt khi biến không trống.

Tôi mất một số cảm hứng từ Most useful NLog configurations

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

Tôi không chắc chắn nếu điều này sẽ giúp bạn có được 100% đó, nhưng nó là một bước đi đúng hướng.