NLog не содержит фильтр, кажется, не работает - PullRequest
1 голос
/ 17 марта 2020

Я использую NLog 4.6.8 и имею следующие простые NLog.config и Program.cs

NLog.config

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

  <variable name="consoleLayout" value="${longdate} [${threadid}] ${logger} ${uppercase:${level}} ${message} ${exception:format=tostring}"/>

  <targets>
    <target type="Console" name="c" layout="${consoleLayout}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="c">
      <when condition="not contains('${message}','XXX')" action="Ignore"/>
     </logger>
  </rules>
</nlog>

Программа .cs

using System;

namespace ConsoleApp1
{
    public class Program
    {
        private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        public static void Main(string[] args)
        {
            logger.Debug("Some dd message");
            logger.Info("Some ii message");
            logger.Debug("XXX Some dd message");
            logger.Info("XXX Some ii message");

            Console.ReadLine();
        }
    }
}

Я ожидаю, что две нижние строки будут отображаться только в моем журнале консоли, а не первые две, но вот что я получаю:

2020-03-17 12:56:31.3767 [1] ConsoleApp1.Program DEBUG Some dd message 
2020-03-17 12:56:31.4046 [1] ConsoleApp1.Program INFO Some ii message
2020-03-17 12:56:31.4076 [1] ConsoleApp1.Program DEBUG XXX Some dd message
2020-03-17 12:56:31.4076 [1] ConsoleApp1.Program INFO XXX Some ii message

Это кажется таким простым, но все же это не работает, я, вероятно, упускаю что-то глупое. Пожалуйста, помогите.

1 Ответ

1 голос
/ 17 марта 2020

Думаю, вам нужно написать это так (включая фильтры)

  <rules>
    <logger name="*" minlevel="Debug" writeTo="c">
       <filters>
         <when condition="not contains('${message}','XXX')" action="Ignore"/>
       </filters>
     </logger>
  </rules>
...