Цель трассировки NLog работает только для уровней трассировки и отладки, но не для информации, предупреждений, ошибок или фатальных - PullRequest
0 голосов
/ 12 июня 2018

Обратите внимание, что я отвечаю на свой вопрос, чтобы помочь людям в будущем.

Когда я использую NLog для входа в тип цели трассировки, он работает правильно только при уровнеTrace или Debug.Если это Info, Warn или Error, то перед моим макетом будет добавлена ​​дополнительная информация.Если уровень равен Fatal, я получаю всплывающее окно с жалобой на неудачное утверждение, и оно также говорит об этом в выходных данных.Не обнаружен ли объект трассировки?

Program.cs

using System;

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

        static void Main(string[] args)
        {
            logger.Trace("Hello Trace");
            logger.Debug("Hello Debug");
            logger.Info("Hello Info");
            logger.Warn("Hello Warn");
            logger.Error("Hello Error");
            logger.Fatal("Hello Fatal");

            Console.ReadLine();
            NLog.LogManager.Shutdown();
        }
    }
}

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"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">

  <targets>
    <target name="logTrace" xsi:type="Trace" layout="${message}" />
  </targets>

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

Ожидаемый результат

Hello Trace
Hello Debug
Hello Info
Hello Warn
Hello Error
Hello Fatal

Фактический результат

Hello Trace
Hello Debug
TraceLoggingTest.exe Information: 0 : Hello Info
TraceLoggingTest.exe Warning: 0 : Hello Warn
TraceLoggingTest.exe Error: 0 : Hello Error
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
Hello Fatal
---- Assert Long Message ----

1 Ответ

0 голосов
/ 12 июня 2018

Исправление для предшествующей проблемы было введено в Nlog 4.5.Вам нужно добавить rawWrite="true" в целевой оператор.Также случается исправить проблему утверждения.

Изменение:

<target name="logTrace" xsi:type="Trace" layout="${message}" />

На это:

<target name="logTrace" xsi:type="Trace" layout="${message}" rawWrite="true" />

С https://github.com/NLog/NLog/wiki/Trace-target:

Параметры макета

rawWrite - Всегда используйте Trace.WriteLine независимо от LogLevel.Default: False

Представленный в NLog 4.5, исправляет проблему с префиксом вывода с именем exe-filename.

Вот два обсуждения исходной проблемы:

...