NLog - 2 个单独的日志文件 - 如何写入一个或另一个

NLog - 2 separate log files - How to write to one or the other

我想明确写入 2 个不同的日志文件。基于操作的方法或类型。

怎么办?

我看过下面的 Whosebug post Having NLog loggers with different configuration

如何配置 NLog?我还需要什么代码,以便我可以写入 1 个文件或其他文件?使用像这样的代码:log.Error("My Big Error")

post包含以下内容

<targets> 
    <target name="f1" xsi:type="File" fileName="${logger}.txt" />
    <target name="f2" xsi:type="File" fileName="${shortdate}.txt" />
</targets>

所以,如果它是 'general error',我想写信给 f1。如果是文件操作错误我想写到f2

提前谢谢

在 NLog 配置中,您需要设置一些规则来写入目标(否则不会记录任何内容)。在这些规则中,您可以添加过滤器和条件。

简单的例子

例如:

<rules>
  <logger name="Logger1" writeTo="f1" />
  <logger name="Logger2" writeTo="f2" />
</rules>

name 属性在这里是一个过滤器,所以第一条规则意味着:如果记录器名称等于 "Logger1",则写入 f1。规则从上到下处理。

因此,当调用 LogManager.GetLogger("Logger1").Info("My message") 时,这将写入目标 f1,而 LogManager.GetLogger("Logger2").Info("My message") 将写入目标 f2

GetCurrentClassLogger

当使用 LogManager.GetCurrentClassLogger() 时,记录器名称由当前 class 和命名空间名称构成,例如"MyNameSpace.MyClass"。这意味着您可以将名称属性调整为 name="MyNameSpace.MyClass"name="*.MyClass" 以进行匹配。

决赛

你也可以这样写:

<rules>
  <logger name="Logger1" writeTo="f1" final="true" />
  <logger name="*" writeTo="f2" />
</rules>

这会将 Logger1 的事件写入 f1,并将其他事件写入 f2。您可能需要 filter 属性,否则 Logger1 的事件也将写入 f2 - 这并不总是您需要的。

其他过滤规则

还有更多过滤器选项,例如最小级别、最大级别,还有更高级的过滤器(不仅在记录器名称上)。您可以阅读更多相关内容 here