2015-11-03 4 views
1

Я использовал 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); 
    } 
+0

В режиме отладки локальный экземпляр IIS использует свой текущий логин как пользователь AppPool, поэтому предположительно у вас есть разрешение на запись в папку, указанную, но может быть стоит проверить –

+0

попробовать также переключая '/' в ' '\\' ' –

+0

См. Http://stackoverflow.com/questions/23729629/why-is-the-basedir-nlog-configuration-not-working/23736348#23736348 –

ответ

0

имена Logger обычно используют что-то вроде этого

<logger name="Name.Space.RampController" minlevel="Debug" writeTo="DefaultTarget" /> 

или, если вы просто хотите, один файл журнала для вашего применение:

<logger name="*" minlevel="Debug" writeTo="DefaultTarget" /> 

Внутренне LogManager.GetCurrentClassLogger смотрит на текущий стек, чтобы определить тип вызова: (Silverlight) удалены условные выражения:

public new T GetCurrentClassLogger() 
{ 
    StackFrame frame = new StackFrame(1, false); 
    return this.GetLogger(frame.GetMethod().DeclaringType.FullName); 
} 
-1

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

Вот новый NLog.config, с которым я ездил.

<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="LogDirectory" value="D:\integration\logs\RampInfo"/> 

    <targets> 
    <target name="LogTarget" 
      xsi:type="File" 
      fileName="${LogDirectory}/${shortdate}.log" 
      encoding="utf-8" 
      maxArchiveFiles="14" 
      layout="${longdate} ${callsite} ${message}" /> 
    </targets> 

    <rules> 
    <logger name="*" minlevel="Debug" writeTo="LogTarget" /> 
    </rules> 
</nlog> 
+0

Имя регистратора теперь *, которое соответствует всем классам. – Joe

Смежные вопросы