Как я могу сказать NLog выборочно войти в систему для двух разных целей памяти? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть класс с NLog MemoryTarget.Мне нужно для каждого экземпляра класса, чтобы журналы этого экземпляра направлялись в его агрегированный экземпляр MemoryTarget.

Я использую SimpleConfigurator.ConfigureForTargetLogging (instance.MemoryTarget, LogLevel.Trace) для инициализации регистратора, что вызываетпоследний вызов ConfigureForTargetLogging в последнем экземпляре для направления всей записи в MemoryTarget последнего экземпляра.

Для экземпляра MemoryTarget можно создать имя, но я не уверен, что у меня есть способ создать экземпляр регистратора, который отправляеттолько к этой названной цели.

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать фильтры имен регистратора в правилах: не подделывайте окончательное ключевое слово, которое прекращает обработку, если какое-либо из следующих правил будет соответствовать:

<?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")
...