Файл журнала Nlog не создан

#c# #nlog

#c# #nlog

Вопрос:

Я пытаюсь регистрировать исключения в консольном приложении. Я сделал все как всегда (и тогда это сработало для меня …):

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:tempnlog-internal.log">
  <targets>
    <target name="LogFile" xsi:type="File"
               fileName="${basedir}/Log/${date:format=yyyyMMdd} myLog.txt"
               layout="${longdate}|${level:uppercase=true}|${message}|${exception}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="LogFile" />
  </rules>
</nlog>
  
 class Program
{
    private static Logger _log = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
      _log.Error("test");
    }
}
  

По какой-то загадочной причине файл нигде не создается на моем компьютере. Есть идеи, почему

Ответ №1:

Ваша конфигурация выглядит корректной, так что это не должно быть проблемой.

Некоторые вещи, которые нужно проверить:

  1. Вы nlog.config в правильном каталоге? Лучший способ проверить — скопировать файл nlog.config в каталог с вашим .dll или .exe.

  2. Включите исключения, чтобы убедиться, что ошибки не фиксируются Nlog: throwExceptions="true"

  3. Проверьте внутренний журнал, установив internalLogLevel="Info" и проверив «c:tempnlog-internal.log «

Полное руководство по устранению неполадок можно найти в документации NLog.

Ответ №2:

В Visual Studio проверьте, имеет ли ваш файл NLog.config следующие свойства: Действие сборки: Содержимое. Копировать в выходной каталог = Копировать, если новее

Я прилагаю снимок экрана, где вы можете увидеть, как он должен выглядеть. Извините, это на испанском языке.

введите описание изображения здесь

Ответ №3:

Отредактируйте свою NLog конфигурацию, измените путь к файлу журнала следующим образом, используйте ${shortdate} вместо {date:format=yyyyMMdd} этого . Задайте имя в правилах и вызовите его, как в этом примере.

  <?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 async="true">
    <targets>
      <target name="LogFile" xsi:type="File"
              fileName="${basedir}/Log/${shortdate}myLog.txt"
              layout="${longdate}|${level:uppercase=true}|${message}|${exception}" />
    </targets>

    <rules>
      <logger name="ErrorLog" minlevel="Trace" writeTo="LogFile" />
    </rules>
</nlog>
  

И ваш .cs

     class Program
{

    private Logger ErrorLogger = NLog.LogManager.GetLogger("ErrorLog");

    static void Main(string[] args)
    {
        ErrorLogger.Error("test");
    }
}
  

Комментарии:

1. Итак, вы предлагаете перейти от ведения журнала на основе классов к ведению журнала с именем — это не должно быть проблемой здесь, имхо… Кроме того, в вашем именовании есть несоответствие: ErrorFile vs ErrorLog .

2. Это только пример, который работает очень хорошо, я предлагаю изменить путь к имени файла, часть формата даты и изменить уровень трассировки для регистрации всего.