gpt4 book ai didi

c# - 使用 NLog 输出到两个日志文件之一

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:25 24 4
gpt4 key购买 nike

我有一个单线程 .NET Winforms 应用程序。我正在使用静态 NLog 记录器使用以下语法记录错误:

MyLogger.Log.Error("Error occurred...");

根据我的一个 NLog.config 定义的目标和一个 NLog.config 定义的规则,日志错误输出总是写入一个名为“errors.txt”的文件。有时我想将错误写入“errors2.txt”。如果不创建另一个静态记录器实例,我将如何做到这一点?

最佳答案

您可以在配置中使用过滤器或将文件名传递给记录器调用。

注意:这些示例使用的是 .WithProperty(在 NLog Logger 上),在 NLog 4.6.3 中引入

过滤器

在记录器规则中使用过滤器,我们使用 LogFinal 所以我们只需要一次规则(第二个记录器规则不需要)

参见 Filtering log messages on the 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 方法中设置一个默认属性。

另见 Event properties documentation

<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...");

关于c# - 使用 NLog 输出到两个日志文件之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56101422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com