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
에 대해서만 정의됩니다.
사용중인 레이아웃은 대상 자체에 의해 선언되어야하지만 다른 심각도 수준에 대해 다른 레이아웃을 지정하는 방법은 없습니다.
<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>
이 그냥 내 눈을 아파요 : 지금은
은, 난 그냥 파일의 동일한 세트의 4 개 개의 다른layout
의이 동일한 구성 코드를 네 번 복사 - 붙여 넣기했다.
이 작업을 수행하고 중복을 피하는 더 좋은 방법이 있습니까?
의견을 보내 주셔서 감사합니다. 지금은 최소한의 의존성을 고수하고 싶지만, 시스템을 재 설계 할 때는 아마도 이것을 구현할 것입니다. –