Ответ 1
Файл журнала создавался - но не в каталоге приложения.
Используя ${basedir} макет рендеринга как часть имени файла, оказался решением.
Я пытаюсь добавить запись в приложение, работающее на мобильном устройстве с 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();
}
Файл журнала создавался - но не в каталоге приложения.
Используя ${basedir} макет рендеринга как часть имени файла, оказался решением.
У меня была проблема, что мой файл журнала не копировался в мой каталог сборки. На странице 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, если новее, чтобы это исправить)
В случае, если ответ, отмеченный как ответ, не так уж ясен, вы можете проверить пример
<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
из руководства по устранению неполадок nlog
Пожалуйста, проверьте свойства файла Nlog.config: Копировать в выходной каталог нужно всегда Копировать
Пожалуйста, просмотрите изображение ссылки https://i.stack.imgur.com/AlUG5.png
В моем случае, я пропустил правила после определения правил работает как шарм
<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>
Я также столкнулся с той же проблемой, наконец, я решил ее. У меня было веб-приложение, где я хочу реализовать NLog. Пожалуйста, найдите следующие шаги для реализации NLog.
Шаг 1: - Зайдите в менеджер пакетов NuGet и установите следующие пакеты.
Шаг 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);
}
}
}
}
Мы сделали. Теперь выполните свой код и наслаждайтесь регистрацией.
В руководстве по устранению неполадок 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", как указано выше, также гарантирует, что вы получите полезные сообщения об ошибках при отладке.
Моя проблема была связана с разрешениями, файл журнала должен позволять процессу писать в него, без прав на запись вы не получите файл.
Вот как это исправить для сайтов в IIS:
Примечание по безопасности. С точки зрения безопасности рекомендуется использовать ApplicationPoolIdentity, поскольку это динамически создаваемая непривилегированная учетная запись. подробнее читайте здесь: https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities
для простых целей устранения неполадок запустите VisualStudio для запуска от имени администратора. Это поможет разобраться в разрешениях на создание файлов журнала при отладке.
Также используйте createDirs = true в каждом целевом разделе, чтобы автоматически создавать отсутствующие папки в пути к файлу, указанном в целевом разделе.