nLog условные макеты - PullRequest
       23

nLog условные макеты

0 голосов
/ 05 декабря 2011

Я использую nLog 2.0 и после это интересное чтение Я пытался применить условия к простому макету как таковому:

layout="${message:when=logger==A}"
layout="${message:when=logger=='A'}"
layout="${message:when='logger==A'}"

Мало того, что ни один из них не имеет никакого эффекта, они также не выдают ошибку, поэтому кажется, что условие где-то молча проглатывается (throwExceptions установлено в true)

  1. Как с условными макетами работать? Они даже работают
  2. Может ли nLog генерировать исключения, если что-то не так / не распознано?

Вот полный код, это базовое консольное приложение.

main.cs:

class Program
{
  static void Main( string[] args )
  {
    NLog.LogManager.GetLogger( "A" ).Info( "from A" );
    NLog.LogManager.GetLogger( "B" ).Info( "from B" );
  }
}

NLog.config (в каталоге исполняемых файлов):

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

  <targets>
    <target name="main" xsi:type="File" fileName="my.log"
            deleteOldFileOnStartup="true" keepFileOpen="true"
            layout="${callsite} ${message:when=logger=='A'}"/>
   </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="main" />
  </rules>
</nlog>

Выход:

ConsoleApplication1.Program.Main from A  -> this should only log ${callsite}
ConsoleApplication1.Program.Main from B

1 Ответ

1 голос
/ 05 декабря 2011

Спасибо! Попробуйте установить имя регистратора:

<logger name="A" minlevel="Trace" writeTo="main" />
<logger name="B" minlevel="Trace" writeTo="main" />

Теперь есть два регистратора, они доступны в коде - условия должны работать.

...