Я использовал NLog в нескольких консольных приложениях без каких-либо проблем, но это первый раз, когда я использовал его в веб-приложении MVC. Когда я пытаюсь войти в файл, ничего не происходит. Ошибок нет и не создаются файлы журналов. Когда я нахожусь в приложении локально, я тоже не получаю никаких ошибок.NLog не создает журнал в приложении MVC?
Первое, что я сделал, это подтверждение того, что для свойства моего файла NLog.config было установлено значение «Копировать всегда» в свойстве «Копировать в вывод». Я даже удалил NLog через NuGet, а затем снова установил его, а также закрыл VS и снова открыл проект.
Я сделал несколько поисков, и единственные реальные предложения, которые я нашел, это сначала создать папку, а затем проверить разрешения в пуле приложений. Я создал папку, но это тоже не сработало. Я запускаю это через режим отладки в Visual Studio 2015, который автоматически запускает локальный веб-сервер, поэтому я не знаю, как узнать, какую службу он использует для записи в местоположение файла.
В приведенном ниже примере я могу поставить точку останова на свой ActionResult внутри моего контроллера и увидеть значение, передаваемое в параметре «gate». Я шаг за шагом проверяю регистратор и не получаю никаких ошибок. Я смотрю в моем местоположении журнала и не создается файл журнала.
У кого-нибудь есть предложения по тому, что я могу попробовать?
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"
autoReload="true"
throwExceptions="true">
<variable name="LogDirBase" value="D:/logs/RampInfo"/>
<variable name="LogYear" value="${date:format=yyy}"/>
<variable name="LogMonth" value="${date:format=MM}"/>
<variable name="LogDay" value="${date:format=dd}"/>
<variable name="LogFileShortDate" value="${date:format=yyyy-MM-dd}"/>
<targets>
<target name="DefaultTarget"
xsi:type="File"
fileName="${LogDirBase}/${LogFileShortDate}.log"
encoding="utf-8"
layout="${longdate} | ${callsite} | ${message}"
maxArchiveFiles="14"
/>
</targets>
<rules>
<logger name="defaultLogger" minlevel="Debug" writeTo="DefaultTarget" />
</rules>
</nlog>
Мой контроллер
public class RampController : Controller
{
private static Logger logger = LogManager.GetCurrentClassLogger();
// GET: GateInfo
public ActionResult Gate(string gate)
{
logger.Debug("Start action result. Gate: " + gate);
}
В режиме отладки локальный экземпляр IIS использует свой текущий логин как пользователь AppPool, поэтому предположительно у вас есть разрешение на запись в папку, указанную, но может быть стоит проверить –
попробовать также переключая '/' в ' '\\' ' –
См. Http://stackoverflow.com/questions/23729629/why-is-the-basedir-nlog-configuration-not-working/23736348#23736348 –