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

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

Я работал над настройкой 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: 

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

Спасибо!

4b9b3361

Ответ 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>

Ответ 3

Альтернативное решение, если Дарин не работает

У вас должен быть NLog.Extended, на который ссылается Дарин. http://nuget.org/packages/NLog.Extended

С NLog 2.0 вам не нужно добавлять ссылку в конфигурацию XML.

Моя проблема заключалась в том, что у меня не было никаких жестких ссылок на NLog.Extended в моем веб-слое (где мой файл web.config), поэтому компилятор не копировал файл там, где он должен быть.

Это можно легко устранить, добавив жесткую ссылку на NLog.Extended, которая не работает, когда вы настраиваете ведение журнала:

//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