Я использую NLog для регистрации исключений в моем приложении asp.net mvc (С#).
NLog не работает в режиме деблокирования. То же самое работает при работе в режиме отладки.
В чем может быть проблема? Есть ли какое-либо исправление для этого?
Я использую NLog для регистрации исключений в моем приложении asp.net mvc (С#).
NLog не работает в режиме деблокирования. То же самое работает при работе в режиме отладки.
В чем может быть проблема? Есть ли какое-либо исправление для этого?
У меня была такая же проблема, как у вас:
Я попробовал сменить каталоги и сменить разрешения безрезультатно. Я даже попытался включить внутреннюю регистрацию, но даже это не сработало! Никаких сбоев, никаких исключений, ничего!
После нескольких исследований я нашел решение. По какой-то причине 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 напрямую разрешило проблему.
настройте переменные среды: NLOG_INTERNAL_LOG_LEVEL и NLOG_INTERNAL_LOG_FILE, запустите свою сборку релизов, затем проверьте файл журнала, посмотрите, что не так.
Перенесите конфигурацию nlog в файл конфигурации вашего приложения (например, web.config) и повторите попытку.
Убедитесь, что ваш целевой файл сохраняется в папке "/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>
Я следил за всеми остальными ответами, но это не сработало. Поэтому я попробовал следующее, и это сработало.
перед вызовом или после вызова LogManager.GetCurrentClassLogger();
.. Я вызвал LogManager.Configuration
.
то есть
#region Constructor
public LoggerService()
{
var configuration = LogManager.Configuration;
_logger = LogManager.GetCurrentClassLogger();
//var configuration = LogManager.Configuration;
}
#endregion Constructor
FYI: Я ничего не делал с конфигурацией. Я просто позвонил.
Причина, по которой это сработало, как и другие, говорит: "Я НЕ ЗНАЮ, ЧТО"!