我有一个带有NLog MemoryTarget的类。 我需要该类的每个实例,该实例的日志将转到其MemoryTarget聚合实例。
我使用SimpleConfigurator.ConfigureForTargetLogging(instance.MemoryTarget,LogLevel.Trace)初始化记录器,这导致最后一个实例上的最后一次ConfigureForTargetLogging调用将所有记录定向到最后一个实例的MemoryTarget。
可以使用名称实例化MemoryTarget,但我不确定是否有办法创建仅发送到该命名目标的记录器实例。
答案 0 :(得分:0)
您可以在规则中使用记录器名称过滤器: 当这一个匹配时,不要伪造最终关键字退出处理任何进一步的规则:
<?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")