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
我想明确写入 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