【问题标题】:How can I tell NLog to selectively log to two different memory targets?如何告诉 NLog 有选择地记录到两个不同的内存目标?
【发布时间】:2018-10-27 23:59:38
【问题描述】:

我有一个带有 NLog MemoryTarget 的课程。 我需要类的每个实例,该实例的日志会转到其 MemoryTarget 聚合实例。

我使用 SimpleConfigurator.ConfigureForTargetLogging(instance.MemoryTarget, LogLevel.Trace) 来初始化记录器,这会导致对最后一个实例的最后一次 ConfigureForTargetLogging 调用将所有日志记录定向到最后一个实例的 MemoryTarget。

可以使用名称实例化 MemoryTarget,但我不确定我是否有办法创建仅发送到该命名目标的记录器实例。

【问题讨论】:

  • 查看 NLog Wiki 了解如何将两个目标注册到各自的日志目标:github.com/nlog/nlog/wiki/…
  • 我在回答中添加了示例。请参阅性能记录器。如果您提供代码,我可以修改答案以匹配您的代码。

标签: c# .net logging nlog


【解决方案1】:

您可以在规则中使用记录器名称过滤器: 当这个匹配时,不要伪造退出处理任何进一步规则的最终关键字:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>
    <target name="perf" xsi:type="File" fileName="perf.log" />
    <target name="console" xsi:type="Console" />
  </targets>

  <rules>
    <logger name="Perf" minlevel="Info" writeTo="perf.log" final="true" />
    <logger name="*" minlevel="Debug" writeTo="console" />
  </rules>
</nlog>

以编程方式:

var config = new NLog.Config.LoggingConfiguration();

var logfile = new NLog.Targets.FileTarget() { FileName = "perf.log", Name = "perf" };
var console = new NLog.Targets.ConsoleTarget() { Name = "console" };

config.LoggingRules.Add(new NLog.Config.LoggingRule("Perf", LogLevel.Info, perf)){Final="true"};
config.LoggingRules.Add(new NLog.Config.LoggingRule("*", LogLevel.Debug, console));

NLog.LogManager.Configuration = config;

在您的代码中,您可以命名为记录器:

Logger logger = NLog.LogManager.GetLogger("Perf")

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2011-03-18
    • 2023-01-09
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多