我有一个单线程.NET WINFORMS应用程序。我正在使用静态NLOG记录器使用此语法记录错误:
MyLogger.Log.Error("Error occurred...");
按照我的一个nlog.config定义的目标和一个nlog.config定义的规则,该日志输出始终写入一个名为" errors.txt"的文件。有时我希望将错误写入" errors2.txt"。如果不创建另一个静态记录器实例,我该怎么做?
您可以在配置中使用过滤器,也可以将文件名传递给记录器调用。
注意:这些示例使用的是.WithProperty
(在NLOG Logger
上(,在NLOG 4.6.3
过滤器
使用Logger规则中的过滤器,我们使用logfinter,因此我们只需要一次规则(第二logger规则不需要(
请参阅Nlog Wiki上的过滤日志消息
<rules>
<logger name="*" writeTo="file-error1">
<filters defaultAction='LogFinal'>
<when condition="${event-properties:target} == 'error2'" action="Ignore" />
</filters>
</logger>
<logger name="*" writeTo="file-error2">
</logger>
</rules>
记录器调用:
MyLogger.Log.Error("Error occurred..."); // writes to file-error1 target
MyLogger.Log.WithProperty("target", "error2").Error("Error occurred..."); // writes to file-error2 target
通过文件名
将文件名传递为属性。也许您可以在静态Log
方法中设置默认属性。
另请参见事件属性文档
<targets>
<target name="file" xsi:type="File"
....
fileName="${basedir}/logs/{event-properties:filename}"
... />
</targets>
记录器调用:
MyLogger.Log.WithProperty("filename", "error1.txt").Error("Error occurred...");
MyLogger.Log.WithProperty("filename", "error2.txt").Error("Error occurred...");