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

时间:2019-05-12 16:50:40

标签: c# nlog

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

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

根据我的一个NLog.config定义的目标和一个NLog.config定义的规则,该日志错误输出始终写入一个名为“ errors.txt”的文件中。有时我希望将错误写入“ errors2.txt”。在不创建另一个静态记录器实例的情况下该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以在配置中使用过滤器,也可以将文件名传递给logger调用。

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

过滤器

在记录器规则中使用过滤器,因为我们使用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...");