NLOG允許我使用SplitGroup
登錄我的消息幾個目標。我想一次使用此功能日誌中的每個消息共同的,用戶特定的和特定日期的日誌:如何在NLog中將不同的佈局應用於同一個目標?
<variable name="commonLog" value="${logDir}\Common.log" />
<variable name="username" value="${identity:fSNormalize=true:authType=false:isAuthenticated=false}" />
<variable name="userLog" value="${logDir}\ByUser\${username}.log" />
<variable name="dateLog" value="${logDir}\ByDate\${shortdate}.log" />
<target name="logFiles" xsi:type="SplitGroup">
<target xsi:type="File" fileName="${commonLog}" layout="${myLayout}" />
<target xsi:type="File" fileName="${userLog}" layout="${myLayout}" />
<target xsi:type="File" fileName="${dateLog}" layout="${myLayout}" />
</target>
這是偉大的,但我也想使用不同的佈局不同程度的嚴重程度。例如,errorLayout
將包括異常信息,並插入[!]
標記,以便我以後可以突出日誌查看類似錯誤BareTail:
<variable name="stamp" value="${date} ${username} ${logger}" />
<variable name="debugLayout" value="${stamp} ... ${message}" />
<variable name="infoLayout" value="${stamp} [i] ${message}" />
<variable name="warnLayout" value="${stamp} [!] ${message}" />
<variable name="errorLayout"
value="${warnLayout}${newline}${pad:padding=10:inner=${exception:format=ToString}}" />
<!-- logFiles target -->
<rules>
<logger name="*" level="Debug" writeTo="logFiles" layout="debugLayout" />
<logger name="*" level="Info" writeTo="logFiles" layout="infoLayout" />
<logger name="*" level="Warn" writeTo="logFiles" layout="warnLayout" />
<logger name="*" level="Error" writeTo="logFiles" layout="errorLayout" />
</rules>
此代碼假定Error
總是配有例外和Warning
,說自己是,但事實並非點。
問題是這個配置是錯誤。它不會工作,因爲logger
沒有layout
屬性。它僅限於target
。正在使用
佈局必須通過目標來宣佈自己,但我看到了不同的嚴重程度指定不同的佈局的手段。
現在,我不得不四次複製粘貼相同的配置代碼只是爲了有四種不同的layout
S代表同一個文件集:
<targets>
<target name="logFilesDebug" xsi:type="SplitGroup">
<target xsi:type="File" fileName="${commonLog}" layout="${debugLayout}" />
<target xsi:type="File" fileName="${userLog}" layout="${debugLayout}" />
<target xsi:type="File" fileName="${dateLog}" layout="${debugLayout}" />
</target>
<target name="logFilesInfo" xsi:type="SplitGroup">
<target xsi:type="File" fileName="${commonLog}" layout="${infoLayout}" />
<target xsi:type="File" fileName="${userLog}" layout="${infoLayout}" />
<target xsi:type="File" fileName="${dateLog}" layout="${infoLayout}" />
</target>
<target name="logFilesWarn" xsi:type="SplitGroup">
<target xsi:type="File" fileName="${commonLog}" layout="${warnLayout}" />
<target xsi:type="File" fileName="${userLog}" layout="${warnLayout}" />
<target xsi:type="File" fileName="${dateLog}" layout="${warnLayout}" />
</target>
<target name="logFilesError" xsi:type="SplitGroup">
<target xsi:type="File" fileName="${commonLog}" layout="${errorLayout}" />
<target xsi:type="File" fileName="${userLog}" layout="${errorLayout}" />
<target xsi:type="File" fileName="${dateLog}" layout="${errorLayout}" />
</target>
</targets>
<rules>
<logger name="*" level="Debug" writeTo="logFilesDebug" />
<logger name="*" level="Info" writeTo="logFilesInfo" />
<logger name="*" level="Warn" writeTo="logFilesWarn" />
<logger name="*" level="Error" writeTo="logFilesError" />
</rules>
這只是傷害了我的眼睛。
有沒有更好的方式來做到這一點,避免重複?
感謝您的評論。現在我想堅持最小的依賴關係,但是當我重新設計系統時,也許我會實現這一點。 –