【问题标题】:NLog - 2 separate log files - How to write to one or the otherNLog - 2 个独立的日志文件 - 如何写入其中一个
【发布时间】:2020-10-06 07:41:56
【问题描述】:

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

怎么做?

我看过以下 StackOverFlow 帖子 Having 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>

所以,如果是“一般错误”,我想写信给 f1。如果是文件操作错误我想写到 f2

提前谢谢

【问题讨论】:

    标签: c# nlog


    【解决方案1】:

    在 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() 时,记录器名称由当前类和命名空间名称构成,例如“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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2021-05-24
      相关资源
      最近更新 更多