#asp.net-mvc #asp.net-mvc-3 #nlog
#asp.net-mvc #asp.net-mvc-3 #nlog
Вопрос:
Я работал над настройкой NLog v2 на моем ASP.NET Приложение MVC 3, и до сих пор оно работало очень хорошо. (Я использую пакет из официального репозитория NuGet) Однако, когда я пытаюсь изменить макет журнала, чтобы включить любой из средств визуализации макета aspnet- *, я получаю ошибку конфигурации. Я свел проблему к следующему минимальному варианту использования:
В блоке configSections:
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
Блок Nlog:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
<variable name="logDirectory" value="C:Logs" />
<targets>
<target name="logFile" xsi:type="File" fileName="${logDirectory}app.log"
layout="${aspnet-user-identity}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logfile" />
</rules>
Если я изменяю макет, используя любую комбинацию средств визуализации, которые не являются частью семейства aspnet *, это работает хорошо (я не тестировал все, но я просмотрел довольно много). Ошибка, которую я получаю, находится здесь:
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: An error occurred creating the configuration section handler for nlog: Exception occurred when loading configuration from C:..[snip]..web.config
Source Error:
Line 16: </configSections>
Line 17:
Line 18: <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
Line 19: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">
Line 20:
Я действительно понятия не имею, что происходит. Я не уверен, что в этом средстве визуализации конфигурация становится недействительной. Я бился над этим большую часть дня и ничего не добился, поэтому я надеюсь, что кто-нибудь здесь сможет помочь.
Спасибо!
Ответ №1:
Убедитесь, что вы ссылались на NLog.Extended
сборку, в которой определены эти макеты и которая, должно быть, также была добавлена пакетом NuGet к ссылкам:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
throwExceptions="true">
<extensions>
<add assembly="NLog.Extended" />
</extensions>
<variable name="logDirectory" value="C:Logs" />
<targets>
<target name="logFile"
xsi:type="File"
fileName="${logDirectory}app.log"
layout="${aspnet-user-identity} ${message}" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
Комментарии:
1. Спасибо. Теперь я чувствую себя немного глупо из-за того, что пропустил это. Я действительно ценю помощь!
2. У меня это просто отказывается работать. Независимо от того, какую переменную я пытаюсь использовать, вывод остается пустым : (
3. Как уже говорилось в некоторых ответах: это теперь в NLog.Web. Я полностью пропустил это, поскольку вся информация в Интернете говорит вам о добавлении NLog. Расширенный
4. Спасибо, я обновил NLog и NLog-журнал. Расширено с помощью VS NuGet, и выполнение в порядке.
Ответ №2:
Начиная с NLog 4.0 ASP.NET теперь рендеринги находятся в Nlog.Веб http://nlog-project.org/2015/06/13/NLog-Extended_NLog-Web_and_NLog-Windows-Forms.html
Ответ №3:
Альтернативное решение, если Darin’s не работает
У вас должен быть NLog.Расширенная ссылка, о которой упоминает Дарин http://nuget.org/packages/NLog.Расширенный
Начиная с NLog 2.0, вам не нужно добавлять ссылку в конфигурационный XML.
Моя проблема заключалась в том, что у меня не было жестких ссылок на NLog.Расширено на моем веб-уровне (где находится мой web.config), поэтому компилятор не копировал файл туда, где он должен был быть.
Это можно легко исправить, добавив жесткую ссылку на NLog.Расширено, это не-операция, где бы вы ни настраивали ведение журнала:
//forces the compiler to include NLog.Extensions in all downstream output directories
private static AspNetApplicationValueLayoutRenderer blank = new AspNetApplicationValueLayoutRenderer();
Ответ №4:
В моем случае я использовал расширение le_nlog и по какой-то причине оно не было установлено в приложении!
итак, я установил * le_nlog *, сделав это :
PM> Install-Package le_nlog