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

Jon*_*Jon 1 c# nlog

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

如何?

我看过以下 StackOverFlow 帖子 Have NLog loggers with different Configuration

如何配置 NLog ?我还需要什么代码,以便我可以写入 1 个文件或另一个文件?使用如下代码log.Error("My Big Error")

该帖子包含以下内容

<targets> 
    <target name="f1" xsi:type="File" fileName="${logger}.txt" />
    <target name="f2" xsi:type="File" fileName="${shortdate}.txt" />
</targets>
Run Code Online (Sandbox Code Playgroud)

因此,如果是“一般错误”,我想写入f1。如果是文件操作错误我想写入f2

提前谢谢

Jul*_*ian 5

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

简单的例子

例如:

<rules>
  <logger name="Logger1" writeTo="f1" />
  <logger name="Logger2" writeTo="f2" />
</rules>
Run Code Online (Sandbox Code Playgroud)

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

因此,当调用LogManager.GetLogger("Logger1").Info("My message")此函数时,将写入 targetf1并将LogManager.GetLogger("Logger2").Info("My message")写入 target f2

获取当前类记录器

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

最终的

你也可以这样写:

<rules>
  <logger name="Logger1" writeTo="f1" final="true" />
  <logger name="*" writeTo="f2" />
</rules>
Run Code Online (Sandbox Code Playgroud)

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

其他过滤规则

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