NLog выдает исключение конфигурации для всех средств визуализации макета aspnet

#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