NLog не создает файл журнала

Я пытаюсь добавить запись в приложение, работающее на мобильном устройстве с Windows Mobile 6.1. Framework.NET Compact Framework 3.5. используя NLog.

У меня установлена соответствующая версия дистрибутива 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">
  <targets>
    <target name="logfile" xsi:type="File" fileName=".\Neolant.ASRM.Terminal.log" layout="${longdate}|${level}|${message}|${exception}" autoFlush="true"/>
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
  </rules>
</nlog>

И вот тестовый код, который я использовал:

public static void Main()
{
    try
    {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
        var logger = NLog.LogManager.GetLogger("UpperLevel");
        logger.Info("test test test.");
        try
        {
            throw new Exception("Unexpected!");
        }
        catch (Exception e)
        {
            var logger = NLog.LogManager.GetLogger("UpperLevel");
            logger.WarnException("An exception occured.", e);
        }
        throw new Exception("Suddenly!");           
    }
    finally
    {
        NLog.LogManager.Flush();
    }
}

private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
    var logger = NLog.LogManager.GetLogger("UpperLevel");
    logger.FatalException("Application closed due to exception.", unhandledExceptionEventArgs.ExceptionObject as Exception);
    NLog.LogManager.Flush();
}

Ответы

Ответ 1

Файл журнала создавался - но не в каталоге приложения.

Используя ${basedir} макет рендеринга как часть имени файла, оказался решением.

Ответ 2

У меня была проблема, что мой файл журнала не копировался в мой каталог сборки. На странице NLog Github был ответ. (Я немного переформатировал абзац для лучшей читабельности.) Https://github.com/NLog/NLog/wiki/Logging-trou устранение неполадок

NLog не может найти файл конфигурации. Это может произойти, если для файла NLog.config задано Build Action = None или Copy to Output Directory = Не копировать в Visual Studio.

Установите Build Action = Content и "Copy to Output Directory = Copy, если новее, чтобы это исправить)

Ответ 3

В случае, если ответ, отмеченный как ответ, не так уж ясен, вы можете проверить пример

<targets>
  <target xsi:type="Console" name="console" 
    layout="${longdate}|${level}|${message}" />
  <target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
          layout="${longdate}
          Trace: ${stacktrace} 
          ${message}" />
  <target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
          layout="${shortdate} | ${message}" />
</targets>

Взято отсюда используя расположение AppData в NLog

Ответ 4

из руководства по устранению неполадок nlog

Пожалуйста, проверьте свойства файла Nlog.config: Копировать в выходной каталог нужно всегда Копировать

Пожалуйста, просмотрите изображение ссылки https://i.stack.imgur.com/AlUG5.png

Ответ 5

В моем случае, я пропустил правила после определения правил работает как шарм

 <rules>
    <logger name="*" minlevel="Trace" writeTo="logfile" />
    <!-- add your logging rules here -->

    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />
    -->
  </rules>

Ответ 6

Я также столкнулся с той же проблемой, наконец, я решил ее. У меня было веб-приложение, где я хочу реализовать NLog. Пожалуйста, найдите следующие шаги для реализации NLog.

Шаг 1: - Зайдите в менеджер пакетов NuGet и установите следующие пакеты. enter image description here

Шаг 2: - Откройте Web.config и добавьте следующую строку

<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
 <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="D:\projects\NlogWeb\nlog-internal.log">
<targets>
  <target name="console" xsi:type="ColoredConsole" layout="${message}" />
  <!--Write logs to File-->
  <target name="file" xsi:type="File" fileName="D:\projects\NlogWeb\ErrorLogFile.log" layout="--------------------- ${level}(${longdate})${machinename}-------------------- ${newline}
Exception Type:${exception:format=Type}${newline} 
Exception Message:${exception:format=Message}${newline}  
Stack Trace:${exception:format=Stack Trace}${newline}  
Additional Info:${message}${newline}" >
</target>  
</targets>   
<rules>

  <logger name="*" minlevel="trace" writeTo="file" />
</rules>
</nlog>

Шаг 3: - Теперь последняя конфигурация для вызова в вашем файле .cs.

using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NlogWeb
{
public partial class Home : System.Web.UI.Page
{
    private static Logger logger = LogManager.GetCurrentClassLogger();
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            throw new Exception("Divide By Zero Exception", new DivideByZeroException());
        }
        catch (Exception ex)
        {                 
            logger.Error(ex.Message);
        }
    }
  }
}

Мы сделали. Теперь выполните свой код и наслаждайтесь регистрацией.

Ответ 7

В руководстве по устранению неполадок nlog:

https://github.com/NLog/NLog/wiki/Logging-troubleshooting

Если вы знаете, что ваш конфигурационный файл определенно найден, временно замените раздел вашего файла NLog.config следующим и попробуйте.

Это правило будет соответствовать любому журналу, который вы создали, и если он будет работать, он поместит файл log.txt в "базовый каталог" - который является каталогом "bin" для вашего тестового экземпляра например если вы работаете в режиме отладки, вы увидите файл log.txt в папке bin > debug. (Это не объясняется очень четко в руководстве по устранению неполадок).

Если это работает, тогда вы знаете, что проблема связана с вашими правилами:

<nlog throwExceptions="true">
  <targets>
    <target name="file" type="File" fileName="${basedir}/log.txt" />
  </targets>
  <rules>
    <logger name="*" minLevel="Trace" writeTo="file" />
  </rules>
</nlog>

Я обнаружил, что для цели работал только файл name= ", другие значения не

Добавление throwExceptions = "true", как указано выше, также гарантирует, что вы получите полезные сообщения об ошибках при отладке.

Ответ 8

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

Вот как это исправить для сайтов в IIS:

  1. Щелкните правой кнопкой мыши по вашей папке в проводнике Windows и выберите свойства
  2. Выберите вкладку безопасности
  3. Нажмите изменить
  4. Нажмите добавить
  5. В текстовом поле введите " IIS AppPool\YourAppPoolName " замените YourAppPoolName на фактическое имя пула приложений, под которым работает ваш сайт.
  6. Нажмите Проверить имена
  7. Нажмите ОК

Примечание по безопасности. С точки зрения безопасности рекомендуется использовать ApplicationPoolIdentity, поскольку это динамически создаваемая непривилегированная учетная запись. подробнее читайте здесь: https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

Ответ 9

для простых целей устранения неполадок запустите VisualStudio для запуска от имени администратора. Это поможет разобраться в разрешениях на создание файлов журнала при отладке.

Также используйте createDirs = true в каждом целевом разделе, чтобы автоматически создавать отсутствующие папки в пути к файлу, указанном в целевом разделе.