Подтвердить что ты не робот

NLog не работает в режиме деблокирования

Я использую NLog для регистрации исключений в моем приложении asp.net mvc (С#).

NLog не работает в режиме деблокирования. То же самое работает при работе в режиме отладки.

В чем может быть проблема? Есть ли какое-либо исправление для этого?

4b9b3361

Ответ 1

У меня была такая же проблема, как у вас:

  • ASP.NET MVC 3
  • .NET 4
  • IIS 7
  • Режим выпуска

Я попробовал сменить каталоги и сменить разрешения безрезультатно. Я даже попытался включить внутреннюю регистрацию, но даже это не сработало! Никаких сбоев, никаких исключений, ничего!

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

2012-02-13 11:34:40.3181 Debug Targets for MyMvcController by level:
2012-02-13 11:34:40.3181 Debug Trace =>
2012-02-13 11:34:40.3181 Debug Debug =>
2012-02-13 11:34:40.3181 Debug Info =>
2012-02-13 11:34:40.3181 Debug Warn =>
2012-02-13 11:34:40.3181 Debug Error =>
2012-02-13 11:34:40.3181 Debug Fatal =>

В основном это означало, что для любого уровня журнала не было никаких целей! Определенно не правильно!

Мой конфигурационный файл NLog был таким простым, как это было возможно (и для него было установлено "Копировать в выходной каталог" ):

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" throwExceptions="true">
  <targets>
    <target name="file" xsi:type="File" fileName="${basedir}/MyApplication.log" />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="file" />
  </rules>
</nlog>

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

Ответ 2

настройте переменные среды: NLOG_INTERNAL_LOG_LEVEL и NLOG_INTERNAL_LOG_FILE, запустите свою сборку релизов, затем проверьте файл журнала, посмотрите, что не так.

Ответ 3

Перенесите конфигурацию nlog в файл конфигурации вашего приложения (например, web.config) и повторите попытку.

Ответ 4

Убедитесь, что ваш целевой файл сохраняется в папке "/logs/". См. Ниже

<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />

Я попытался войти в "root/log.log" и не работал, затем попробовал "root/logs/log.log" и работал

Ниже полного файла конфигурации.

<?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:\temp\nlog-internal.log" >


  <!-- optional, add some variabeles
  https://github.com/nlog/NLog/wiki/Configuration-file#variables
  -->
  <variable name="myvar" value="myvalue"/>

  <!-- 
  See https://github.com/nlog/nlog/wiki/Configuration-file 
  for information on customizing logging rules and outputs.
   -->
  <targets>

    <!-- 
    add your targets here 
    See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    -->

    <!--
    Writing events to the a file with the date in the filename. -->
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />

  </targets>

  <rules>
    <!-- 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>

Ответ 5

Я следил за всеми остальными ответами, но это не сработало. Поэтому я попробовал следующее, и это сработало.

перед вызовом или после вызова LogManager.GetCurrentClassLogger();.. Я вызвал LogManager.Configuration.

то есть

#region Constructor

public LoggerService()
{
    var configuration = LogManager.Configuration;
    _logger = LogManager.GetCurrentClassLogger();
    //var configuration = LogManager.Configuration;
}

#endregion Constructor

FYI: Я ничего не делал с конфигурацией. Я просто позвонил.

Причина, по которой это сработало, как и другие, говорит: "Я НЕ ЗНАЮ, ЧТО"!