nLog条件布局

时间:2011-12-05 09:43:18

标签: nlog nlog-configuration

我正在使用nLog 2.0,在this interesting read之后我尝试将条件应用于简单的布局:

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

这些不仅没有任何效果,它们也不会抛出错误,所以似乎某个地方默默地吞下了这个条件(throwExceptions设置为true)

  1. 如何使用条件布局?他们甚至工作
  2. 如果出现错误/无法识别,nLog可以抛出异常吗?
  3. 这是完整的代码,这是一个基本的控制台应用程序。

    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 个答案:

答案 0 :(得分:1)

谢谢!尝试设置记录器名称:

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

现在有两个记录器,它们在代码中可用 - 条件应该有效。