NLog, iletilerimi birkaç hedefe günlüğe kaydetmek için SplitGroup
kullanmamı sağlıyor. Bu harikaNLog'da farklı düzenler aynı hedefe nasıl uygulanır?
<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>
fakat ben de için farklı düzenler kullanmak istiyorum: Tek seferde bir ortak, kullanıcıya özel ve tarih özgü günlükleri için günlüğüne her mesaj için bu özelliği kullanmak istiyorum Farklı şiddet dereceleri. Örneğin, errorLayout
istisna bilgileri içerir ve [!]
işaretleyici yüzden sonradan BareTail gibi günlük izleyiciler hataları vurgulamak olabilir ekler:
<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>
Bu kod Error
hep istisnalar ile gelen varsayar ve Warning
ler yok ama bu değil puan.
Bu sorun 'dir. Bu yapılandırma yanlış. Çalışmıyor, çünkü logger
'un layout
özniteliği yok. Yalnızca target
için tanımlanmıştır.
Kullanılmakta olan düzen, hedeflerin kendileri tarafından beyan edilmek zorundadır, ancak farklı düzeyler için farklı düzenler belirtmenin hiçbir yolunu göremiyorum.
<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>
Bu sadece gözlerimi acıtıyor: Şimdilik
, sadece aynı dosya kümesi için dört farklılayout
s olması aynı yapılandırma kodunu dört kez kopyalayıp yapıştırmak zorunda kaldı.
Bunu yapmak ve kopyalamaktan kaçınmanın daha iyi bir yolu var mı?
Yorumunuz için teşekkürler. Şimdilik asgari bağımlılıklara bağlı kalmak istiyorum ama sistemi yeniden kurduğumda, belki bunu uygulayacağım. –