NLog генерирует исключение конфигурации на всех средствах отображения макета aspnet - PullRequest
23 голосов
/ 10 июня 2011

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

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

Спасибо!

Ответы [ 4 ]

32 голосов
/ 10 июня 2011

Убедитесь, что вы указали сборку 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>
11 голосов
/ 05 августа 2015

Начиная с NLog 4.0 рендеры ASP.NET теперь находятся в Nlog.Web http://nlog -project.org / 2015/06/13 / NLog-Extended_NLog-Web_and_NLog-Windows-Forms.html

8 голосов
/ 06 июня 2013

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

Вы должны иметь 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();
1 голос
/ 24 февраля 2013

В моем случае я использовал расширение le_nlog и по какой-то причине оно не было установлено в приложении!

поэтому я установил * le_nlog * следующим образом:

PM> Install-Package le_nlog
...